Существует более простой и эффективный способ, использующий встроенную функцию удаления префикса / суффикса оболочки:
temp="${opt%\"}"
temp="${temp#\"}"
echo "$temp"
${opt%\"}удалит суффикс "(экранированный с обратной косой чертой для предотвращения интерпретации оболочки).
${temp#\"}удалит префикс "(экранированный с обратной косой чертой для предотвращения интерпретации оболочки).
Еще одним преимуществом является то, что он будет удалять окружающие цитаты, только если есть окружающие цитаты.
Кстати, ваше решение всегда удаляет первый и последний символ, какими бы они ни были (конечно, я уверен, что вы знаете свои данные, но всегда лучше быть уверенным в том, что вы удаляете).
Используя sed:
echo "$opt" | sed -e 's/^"//' -e 's/"$//'
(Улучшенная версия, как указано в jfgagne, избавление от эха)
sed -e 's/^"//' -e 's/"$//' <<<"$opt"
Таким образом, он заменяет ведущий "ни с чем, и трейлинг "тоже ни с чем. В том же вызове (нет необходимости передавать и запускать другой sed. Используя -eвы можете иметь несколько текстовых обработок).
sed "s/^\(\"\)\(.*\)\1\$/\2/g" <<<"$opt". Этот синтаксис удалит qoutes только тогда, когда есть совпадающая пара.