Existe uma maneira mais simples e eficiente de usar o recurso de remoção de prefixo / sufixo nativo do shell:
temp="${opt%\"}"
temp="${temp#\"}"
echo "$temp"
${opt%\"}
removerá o sufixo "
(escapou com uma barra invertida para impedir a interpretação do shell).
${temp#\"}
removerá o prefixo "
(escapou com uma barra invertida para impedir a interpretação do shell).
Outra vantagem é que ele removerá as aspas circundantes apenas se houver aspas circundantes.
BTW, sua solução sempre remove o primeiro e o último caractere, sejam eles quais forem (é claro, tenho certeza de que você conhece seus dados, mas é sempre melhor ter certeza do que está removendo).
Usando sed:
echo "$opt" | sed -e 's/^"//' -e 's/"$//'
(Versão melhorada, conforme indicado por jfgagne, eliminando o eco)
sed -e 's/^"//' -e 's/"$//' <<<"$opt"
Portanto, substitui uma liderança "
por nada e uma trilha "
por nada também. Na mesma chamada (não há necessidade de canalizar e iniciar outro sed. Usando -e
você pode ter vários processos de texto).
sed "s/^\(\"\)\(.*\)\1\$/\2/g" <<<"$opt"
. Essa sintaxe removerá qoutes somente quando houver um par correspondente.