Il existe une méthode plus simple et plus efficace, qui consiste à utiliser la fonction de suppression des préfixes/suffixes du shell natif :
temp="${opt%\"}"
temp="${temp#\"}"
echo "$temp"
${opt%\"}
supprimera le suffixe "
(échappé avec un backslash pour empêcher l'interprétation par l'interpréteur de commandes).
${temp#\"}
supprimera le préfixe "
(échappé avec un backslash pour empêcher l'interprétation par l'interpréteur de commandes).
Un autre avantage est qu'il ne supprimera les guillemets environnants que s'ils existent.
Par ailleurs, votre solution supprime toujours le premier et le dernier caractère, quels qu'ils soient (bien sûr, je suis sûr que vous connaissez vos données, mais il est toujours préférable d'être sûr de ce que vous supprimez).
En utilisant sed :
echo "$opt" | sed -e 's/^"//' -e 's/"$//'
(Version améliorée, comme indiqué par jfgagne, en se débarrassant de l'écho)
sed -e 's/^"//' -e 's/"$//' <<<"$opt"
Il remplace donc un premier "
avec rien, et une queue "
avec rien non plus. Dans la même invocation (il n'y a pas besoin de pipe et de lancer un autre sed. En utilisant -e
vous pouvez avoir plusieurs traitements de texte).
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 .