|
Bir case
ifade testi olarak ayrılmış farklı dizeleri oluşan bir değişken kullanmaya çalışıyorum . Örneğin:
string="\"foo\"|\"bar\""
read choice
case $choice in
$string)
echo "You chose $choice";;
*)
echo "Bad choice!";;
esac
İfadenin ilk kısmını yazabilmek foo
veya bar
çalıştırabilmek istiyorum case
. Ancak, ikisini de al foo
ve bar
ikinciye götür:
$ foo.sh
foo
Bad choice!
$ foo.sh
bar
Bad choice!
"$string"
Bunun yerine kullanılması $string
fark etmez. Kullanmak da değil string="foo|bar"
.
Bu şekilde yapabileceğimi biliyorum:
case $choice in
"foo"|"bar")
echo "You chose $choice";;
*)
echo "Bad choice!";;
esac
Çeşitli geçici çözümler düşünebilirim ama bir değişkeni case
bash içinde bir koşul olarak kullanmanın mümkün olup olmadığını bilmek istiyorum . Bu mümkün mü ve eğer öyleyse, nasıl?
read
biraz beni durdurdu. Bu gibi görünen olduğunu Bence kullanıcı girişi doğrulama, içinde, case
desenler gerektiğini değil değerlendirme listesinin en üstünde olacak ve oldukça aşağı budanmış olmalıdır *
varsayılan desen orada ulaşmak sadece sonuçlar kabul edilebilir garantilidir şekilde. yine de, sorun ayrıştırma / genişletme sırası olduğundan, ikinci bir değerlendirme gerekli olabilir.
eval
$ seçim parens, yıldız, noktalı virgülü ve satırbaşları kaçan. Çirkin, ama "çalışıyor".