Jest prostszy i bardziej wydajny sposób, używając funkcji usuwania prefiksu / sufiksu natywnej powłoki:
temp="${opt%\"}"
temp="${temp#\"}"
echo "$temp"
${opt%\"}
usunie sufiks "
(znak ucieczki z ukośnikiem odwrotnym, aby zapobiec interpretacji powłoki).
${temp#\"}
usunie prefiks "
(znak ucieczki z ukośnikiem odwrotnym, aby zapobiec interpretacji powłoki).
Kolejną zaletą jest to, że usunie otaczające cytaty tylko wtedy, gdy istnieją otaczające cytaty.
BTW, twoje rozwiązanie zawsze usuwa pierwszy i ostatni znak, bez względu na to, jakie mogą być (oczywiście, jestem pewien, że znasz swoje dane, ale zawsze lepiej być pewnym, co usuwasz).
Za pomocą sed:
echo "$opt" | sed -e 's/^"//' -e 's/"$//'
(Poprawiona wersja, jak wskazuje jfgagne, pozbycie się echa)
sed -e 's/^"//' -e 's/"$//' <<<"$opt"
Zastępuje zatem prowadzenie "
bez niczego, a ciągnięcie "
z niczym. W tej samej inwokacji (nie trzeba instalować potoków i uruchamiać kolejnej wersji. Za pomocą -e
można przetwarzać wiele tekstów).
sed "s/^\(\"\)\(.*\)\1\$/\2/g" <<<"$opt"
. Ta składnia usunie qoutes tylko wtedy, gdy istnieje pasująca para.