Yerel kabuk öneki / soneki kaldırma özelliğini kullanarak daha basit ve daha verimli bir yol vardır:
temp="${opt%\"}"
temp="${temp#\"}"
echo "$temp"
${opt%\"}
soneki kaldıracaktır "
(kabuk yorumlamasını önlemek için ters eğik çizgi ile kaçtı).
${temp#\"}
öneki kaldırır "
(kabuk yorumlamasını önlemek için ters eğik çizgiyle kaçar).
Başka bir avantajı, yalnızca tırnak içine alındığında çevresindeki tırnak işaretlerini kaldıracağıdır.
BTW, çözümünüz her zaman ilk ve son karakteri kaldırır, ne olursa olsun (elbette, verilerinizi bildiğinizden eminim, ancak neyi kaldırdığınızdan emin olmak her zaman daha iyidir).
Sed kullanma:
echo "$opt" | sed -e 's/^"//' -e 's/"$//'
(Geliştirilmiş versiyon, jfgagne tarafından gösterildiği gibi, yankıdan kurtuluyor)
sed -e 's/^"//' -e 's/"$//' <<<"$opt"
Bu yüzden "
bir önderliği hiçbir şeyle değil, bir öyküyü "
de hiçbir şeyle değiştirmez. Aynı çağrıda (başka bir sed'i başlatmaya ve başlatmaya gerek yoktur. Kullanarak -e
birden fazla metin işleme yapabilirsiniz).
sed "s/^\(\"\)\(.*\)\1\$/\2/g" <<<"$opt"
. Bu sözdizimi qoutes'i yalnızca eşleşen bir çift olduğunda kaldırır.