Hay una manera más simple y eficiente, utilizando la función de eliminación de prefijo / sufijo de shell nativo:
temp="${opt%\"}"
temp="${temp#\"}"
echo "$temp"
${opt%\"}
eliminará el sufijo "
(se escapó con una barra diagonal inversa para evitar la interpretación de shell).
${temp#\"}
eliminará el prefijo "
(se escapó con una barra diagonal inversa para evitar la interpretación de shell).
Otra ventaja es que eliminará las comillas circundantes solo si hay comillas circundantes.
Por cierto, su solución siempre elimina el primer y el último carácter, sean los que sean (por supuesto, estoy seguro de que conoce sus datos, pero siempre es mejor estar seguro de lo que está eliminando).
Usando sed:
echo "$opt" | sed -e 's/^"//' -e 's/"$//'
(Versión mejorada, como lo indica jfgagne, deshaciéndose del eco)
sed -e 's/^"//' -e 's/"$//' <<<"$opt"
Por lo tanto, reemplaza un inicio "
con nada y un final "
sin nada también. En la misma invocación (no hay necesidad de canalizar e iniciar otro sed.-e
puede tener procesamiento de texto múltiple).
sed "s/^\(\"\)\(.*\)\1\$/\2/g" <<<"$opt"
. Esta sintaxis eliminará qoutes solo cuando haya un par coincidente.