Saya mencoba menggunakan variabel yang terdiri dari string berbeda yang dipisahkan dengan |sebagai casetes pernyataan. Sebagai contoh:
string="\"foo\"|\"bar\""
read choice
case $choice in
$string)
echo "You chose $choice";;
*)
echo "Bad choice!";;
esac
Saya ingin dapat mengetik fooatau bardan menjalankan bagian pertama dari casepernyataan itu. Namun, keduanya foodan barbawa saya ke yang kedua:
$ foo.sh
foo
Bad choice!
$ foo.sh
bar
Bad choice!
Menggunakan "$string"bukannya $stringtidak ada bedanya. Tidak menggunakan string="foo|bar".
Saya tahu saya bisa melakukannya dengan cara ini:
case $choice in
"foo"|"bar")
echo "You chose $choice";;
*)
echo "Bad choice!";;
esac
Saya dapat memikirkan berbagai solusi tetapi saya ingin tahu apakah mungkin menggunakan variabel sebagai casekondisi dalam bash. Apakah mungkin dan, jika ya, bagaimana?
readsedikit menghentikan saya. menurut pendapat saya, validasi input pengguna, yang memang seperti ini, casepola seharusnya tidak berada di bagian atas daftar evaluasi, dan lebih baik dipangkas ke *pola default sehingga satu-satunya hasil yang mencapai di sana dijamin dapat diterima. tetap saja, karena masalahnya adalah urutan parse / ekspansi, maka evaluasi kedua bisa menjadi apa yang diperlukan.
eval, melepaskan $ pilihan, parens, asterisk, titik koma, dan baris baru. Jelek, tapi "berhasil".