Esiste un modo più semplice ed efficiente, utilizzando la funzione di rimozione prefisso / suffisso della shell nativa:
temp="${opt%\"}"
temp="${temp#\"}"
echo "$temp"
${opt%\"}
rimuoverà il suffisso "
(scappato con una barra rovesciata per impedire l'interpretazione della shell).
${temp#\"}
rimuoverà il prefisso "
(scappato con una barra rovesciata per impedire l'interpretazione della shell).
Un altro vantaggio è che rimuoverà le virgolette circostanti solo se ci sono virgolette circostanti.
A proposito, la tua soluzione rimuove sempre il primo e l'ultimo carattere, qualunque essi siano (ovviamente, sono sicuro che conosci i tuoi dati, ma è sempre meglio essere sicuri di ciò che stai rimuovendo).
Usando sed:
echo "$opt" | sed -e 's/^"//' -e 's/"$//'
(Versione migliorata, come indicato da jfgagne, eliminando l'eco)
sed -e 's/^"//' -e 's/"$//' <<<"$opt"
Quindi sostituisce un leader "
con niente e un finale anche "
con niente. Nella stessa invocazione (non è necessario reindirizzare e avviare un altro file sed. L'utilizzo -e
può avere l'elaborazione di più testi).
sed "s/^\(\"\)\(.*\)\1\$/\2/g" <<<"$opt"
. Questa sintassi rimuoverà qoutes solo quando è presente una coppia corrispondente.