Es gibt einen einfacheren und effizienteren Weg, indem man die native Funktion der Shell zum Entfernen von Präfixen/Suffixen verwendet:
temp="${opt%\"}"
temp="${temp#\"}"
echo "$temp"
${opt%\"}
entfernt das Suffix "
(escaped mit einem Backslash, um die Interpretation durch die Shell zu verhindern).
${temp#\"}
entfernt das Präfix "
(escaped mit einem Backslash, um die Interpretation durch die Shell zu verhindern).
Ein weiterer Vorteil ist, dass umschließende Anführungszeichen nur dann entfernt werden, wenn diese vorhanden sind.
Übrigens werden bei Ihrer Lösung immer das erste und das letzte Zeichen entfernt, unabhängig davon, um welches Zeichen es sich handelt (ich bin sicher, dass Sie Ihre Daten kennen, aber es ist immer besser, sicher zu sein, was Sie entfernen).
Verwendung von sed:
echo "$opt" | sed -e 's/^"//' -e 's/"$//'
(Verbesserte Version, wie von jfgagne angegeben, um das Echo loszuwerden)
sed -e 's/^"//' -e 's/"$//' <<<"$opt"
Es ersetzt also ein führendes "
mit nichts, und ein hinteres "
auch mit nichts. In demselben Aufruf (es ist nicht nötig, eine andere sed. Verwendung von -e
können Sie mehrere Textverarbeitungen durchführen).
0 Stimmen
Ich würde vorschlagen, dass Sie
sed "s/^\(\"\)\(.*\)\1\$/\2/g" <<<"$opt"
. Diese Syntax entfernt Qoutes nur, wenn es ein passendes Paar gibt.0 Stimmen
@JohnSmith Ich muss auch automatisch Anführungszeichen in einem Shell-Skript entschlüsseln, aber ich muss das tun, egal ob sie übereinstimmen oder nicht, also werde ich den von Ihnen geposteten Ausdruck wahrscheinlich nicht verwenden.
0 Stimmen
Wenn Sie diese Frage gefunden haben und einfach alle Anführungszeichen entfernen wollen, lesen Sie diese Antwort: askubuntu.com/a/979964/103498 .