มีวิธีที่ง่ายและมีประสิทธิภาพมากขึ้นโดยใช้คุณลักษณะการลบคำนำหน้า / คำต่อท้ายเชลล์แบบเนทีฟ:
temp="${opt%\"}"
temp="${temp#\"}"
echo "$temp"
${opt%\"}
จะลบคำต่อท้าย"
(หนีด้วยแบ็กสแลชเพื่อป้องกันการตีความเชลล์)
${temp#\"}
จะลบคำนำหน้า"
(หนีด้วยแบ็กสแลชเพื่อป้องกันการตีความเชลล์)
ข้อดีอีกอย่างคือมันจะลบเครื่องหมายคำพูดล้อมรอบเฉพาะในกรณีที่มีเครื่องหมายคำพูดล้อมรอบอยู่
BTW โซลูชันของคุณจะลบอักขระตัวแรกและตัวสุดท้ายเสมอไม่ว่าพวกเขาจะเป็นใคร (แน่นอนฉันแน่ใจว่าคุณรู้ข้อมูลของคุณ
ใช้ sed:
echo "$opt" | sed -e 's/^"//' -e 's/"$//'
(รุ่นที่ปรับปรุงแล้วตามที่ระบุโดย jfgagne กำจัดเสียงก้อง)
sed -e 's/^"//' -e 's/"$//' <<<"$opt"
ดังนั้นจึงแทนที่ผู้นำ"
ด้วยไม่มีอะไรและต่อท้าย"
ด้วยไม่มีอะไรเกินไป ในการเรียกใช้งานเดียวกัน (ไม่จำเป็นต้องไพพ์และเริ่มการทำงานอื่นอีกการใช้-e
คุณสามารถมีการประมวลผลข้อความหลายรายการ)
sed "s/^\(\"\)\(.*\)\1\$/\2/g" <<<"$opt"
ผมขอแนะนำให้ใช้ ไวยากรณ์นี้จะลบ qoutes เฉพาะเมื่อมีคู่ที่ตรงกัน