Існує простіший та ефективніший спосіб, використовуючи функцію видалення нативної оболонки / суфікса:
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 лише тоді, коли є відповідна пара.