Saya mencoba menggunakan variabel yang terdiri dari string berbeda yang dipisahkan dengan |
sebagai case
tes pernyataan. Sebagai contoh:
string="\"foo\"|\"bar\""
read choice
case $choice in
$string)
echo "You chose $choice";;
*)
echo "Bad choice!";;
esac
Saya ingin dapat mengetik foo
atau bar
dan menjalankan bagian pertama dari case
pernyataan itu. Namun, keduanya foo
dan bar
bawa saya ke yang kedua:
$ foo.sh
foo
Bad choice!
$ foo.sh
bar
Bad choice!
Menggunakan "$string"
bukannya $string
tidak 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 case
kondisi dalam bash. Apakah mungkin dan, jika ya, bagaimana?
read
sedikit menghentikan saya. menurut pendapat saya, validasi input pengguna, yang memang seperti ini, case
pola 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".