ฉันพยายามที่จะใช้ตัวแปรประกอบด้วยสตริงที่แตกต่างกันแยกออกจากกันด้วยความ|
เป็นcase
ทดสอบคำสั่ง ตัวอย่างเช่น:
string="\"foo\"|\"bar\""
read choice
case $choice in
$string)
echo "You chose $choice";;
*)
echo "Bad choice!";;
esac
ฉันต้องการที่จะพิมพ์foo
หรือbar
ดำเนินการส่วนแรกของcase
คำสั่ง อย่างไรก็ตามทั้งสองfoo
และbar
พาฉันไปที่สอง:
$ foo.sh
foo
Bad choice!
$ foo.sh
bar
Bad choice!
ใช้"$string"
แทน$string
ทำให้ไม่มีความแตกต่าง string="foo|bar"
ไม่ไม่ใช้
ฉันรู้ว่าฉันสามารถทำได้ด้วยวิธีนี้:
case $choice in
"foo"|"bar")
echo "You chose $choice";;
*)
echo "Bad choice!";;
esac
ฉันสามารถคิดถึงวิธีแก้ปัญหาต่าง ๆ แต่ฉันต้องการทราบว่าเป็นไปได้ที่จะใช้ตัวแปรเป็นcase
เงื่อนไขในการทุบตี เป็นไปได้และถ้าเป็นเช่นนั้นได้อย่างไร
read
บิตก็หยุดฉัน ในความเห็นของฉันการตรวจสอบการป้อนข้อมูลของผู้ใช้ซึ่งเป็นสิ่งที่ดูเหมือนว่าจะเป็นcase
รูปแบบไม่ควรอยู่ด้านบนของรายการการประเมินผลและควรถูกตัดให้เป็น*
รูปแบบเริ่มต้นแทนที่จะรับประกันผลลัพธ์เท่านั้นที่ยอมรับได้ ยังเพราะปัญหาคือการแยก / คำสั่งขยายแล้วการประเมินผลที่สองอาจเป็นสิ่งที่เรียกร้องให้
eval
หลีกเลี่ยง $ choice, parens, asterisk, semicolons และ newlines น่าเกลียด แต่มัน "ได้ผล"