Ada cara yang lebih sederhana dan lebih efisien, menggunakan fitur prefix / suffix shell asli:
temp="${opt%\"}"
temp="${temp#\"}"
echo "$temp"
${opt%\"}
akan menghapus suffix "
(lolos dengan backslash untuk mencegah interpretasi shell).
${temp#\"}
akan menghapus awalan "
(lolos dengan backslash untuk mencegah interpretasi shell).
Keuntungan lain adalah bahwa ia akan menghapus tanda kutip sekitarnya hanya jika ada tanda kutip sekitarnya.
BTW, solusi Anda selalu menghilangkan karakter pertama dan terakhir, apa pun itu (tentu saja, saya yakin Anda tahu data Anda, tetapi selalu lebih baik untuk memastikan apa yang Anda hapus).
Menggunakan sed:
echo "$opt" | sed -e 's/^"//' -e 's/"$//'
(Versi yang ditingkatkan, seperti yang ditunjukkan oleh jfgagne, menyingkirkan gema)
sed -e 's/^"//' -e 's/"$//' <<<"$opt"
Jadi itu menggantikan yang memimpin "
dengan yang tidak ada, dan yang tertinggal "
dengan yang juga. Dalam doa yang sama (tidak perlu melakukan pipa dan memulai sed lain. Menggunakan -e
Anda dapat memiliki beberapa pemrosesan teks).
sed "s/^\(\"\)\(.*\)\1\$/\2/g" <<<"$opt"
. Sintaks ini hanya akan menghapus qoutes ketika ada pasangan yang cocok.