Существует более простая и эффективная функция с использованием встроенной функции удаления префикса / суффикса оболочки:
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 вы можете обрабатывать несколько текстов).