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