356 votes

Shell script - supprimer le premier et le dernier guillemet (") d'une variable

Voici l'extrait d'un script d'un script plus important. Il supprime les guillemets de la chaîne de caractères qui est maintenue par une variable. Je le fais en utilisant sed, mais est-ce efficace ? Si non, quelle est la méthode efficace ?

#!/bin/sh

opt="\"html\\test\\\""
temp=`echo $opt | sed 's/.\(.*\)/\1/' | sed 's/\(.*\)./\1/'`
echo $temp

0 votes

Je suggère d'utiliser sed "s/^\(\"\)\(.*\)\1\$/\2/g" <<<"$opt" . Cette syntaxe ne supprime les qoutes que lorsqu'il existe une paire correspondante.

0 votes

@JohnSmith Je dois également échapper automatiquement aux guillemets dans un shell script, mais je dois le faire qu'ils correspondent ou non, donc je n'utiliserai probablement pas l'expression que vous avez postée.

0 votes

Si vous avez trouvé cette question en voulant simplement supprimer toutes les citations, voyez cette réponse : askubuntu.com/a/979964/103498 .

2voto

Federico Firenze Points 141

J'utilise cette expression régulière, qui évite de supprimer les guillemets des chaînes de caractères qui ne sont pas correctement citées, ici les différentes sorties sont montrées en fonction des entrées, seule une avec guillemet début-fin a été affectée :

echo '"only first' | sed 's/^"\(.*\)"$/\1/'

Sortie : > "seulement le premier<

echo 'only last"' | sed 's/^"\(.*\)"$/\1/'

Sortie : > "seulement dernier"<

echo '"both"' | sed 's/^"\(.*\)"$/\1/'

Sortie : >les deux<

echo '"space after" ' | sed 's/^"\(.*\)"$/\1/'

Sortie : > "espace après" <

echo ' "space before"' | sed 's/^"\(.*\)"$/\1/'

Sortie : > "espace avant"<

1voto

DevilTour Points 39

Il existe une autre façon de procéder. Comme :

echo ${opt:1:-1}

-2voto

James Bond Points 708

Si vous essayez d'enlever les guillemets parce que le Makefile les garde, essayez ceci :

$(subst $\",,$(YOUR_VARIABLE))

Basé sur une autre réponse : https://stackoverflow.com/a/10430975/10452175

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X