jest bardziej prosty i skuteczny, przy użyciu prefiksu rodzimy powłoki/funkcja usuwania sufiksu:
temp="${opt%\"}"
temp="${temp#\"}"
echo "$temp"
$ {opt% \ "} usunie przyrostek" (uciekł z backslash aby zapobiec interpretacji shell)
$ {temp # \ "} usunie prefiks" (uciekł z backslash do zapobiec interpretacji powłoki)
Kolejną zaletą jest to, że usuwa otaczające cytaty tylko wtedy, gdy są w pobliżu cytaty.
BTW, twoje rozwiązanie usuwa zawsze pierwszą i ostatnią postać, niezależnie od tego, czym one są (oczywiście, jestem pewien, że znasz swoje dane, ale zawsze lepiej mieć pewność, co usuwasz).
Korzystanie sed:
echo "$opt" | sed -e 's/^"//' -e 's/"$//'
(ulepszona wersja, jak wskazano jfgagne, pozbycie echo)
sed -e 's/^"//' -e 's/"$//' <<<"$opt"
Więc Zastępuje on wiodącą "z niczego, i na końcu" z niczego także. W tej samej inwokacji (nie trzeba potokować i uruchomić innego sed, używając opcji -e możesz mieć wiele procesów przetwarzania tekstu).
I sugerowałyby przy użyciu 'sed "s/^ \ (\" \) \ (. * \) \ 1 \ $/\ 2/g "<<<" $ opt Ta składnia usunie qoute tylko wtedy, gdy istnieje pasująca para: –
@JohnSmith Muszę też automatycznie ukrywać cudzysłowy w skrypcie powłoki, ale muszę to zrobić bez względu na to, czy pasują, czy nie, więc prawdopodobnie nie będę używał to wyrażenie, które opublikowałeś – Pysis