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