Có một cách đơn giản và hiệu quả hơn, bằng cách sử dụng tính năng loại bỏ tiền tố / hậu tố gốc:
temp="${opt%\"}"
temp="${temp#\"}"
echo "$temp"
${opt%\"}
sẽ loại bỏ hậu tố "
(thoát với dấu gạch chéo ngược để ngăn việc giải thích shell).
${temp#\"}
sẽ loại bỏ tiền tố "
(thoát bằng dấu gạch chéo ngược để ngăn việc giải thích shell).
Một ưu điểm khác là nó sẽ loại bỏ các trích dẫn xung quanh chỉ khi có các trích dẫn xung quanh.
BTW, giải pháp của bạn luôn loại bỏ ký tự đầu tiên và cuối cùng, bất kể chúng là gì (tất nhiên, tôi chắc chắn bạn biết dữ liệu của mình, nhưng tốt hơn là luôn chắc chắn về những gì bạn đang xóa).
Sử dụng sed:
echo "$opt" | sed -e 's/^"//' -e 's/"$//'
(Phiên bản cải tiến, như được chỉ định bởi jfgagne, loại bỏ tiếng vang)
sed -e 's/^"//' -e 's/"$//' <<<"$opt"
Vì vậy, nó thay thế một dẫn đầu "
không có gì, và một dấu vết "
không có gì quá. Trong cùng một lời gọi (không cần phải đặt ống và bắt đầu một sed khác. Sử dụng -e
bạn có thể xử lý nhiều văn bản).
sed "s/^\(\"\)\(.*\)\1\$/\2/g" <<<"$opt"
. Cú pháp này sẽ loại bỏ qoutes chỉ khi có một cặp phù hợp.