|Bir caseifade 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 fooveya barçalıştırabilmek istiyorum case. Ancak, ikisini de al foove barikinciye götür:
$ foo.sh
foo
Bad choice!
$ foo.sh
bar
Bad choice!
"$string"Bunun yerine kullanılması $stringfark 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 casebash 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?
readbiraz beni durdurdu. Bu gibi görünen olduğunu Bence kullanıcı girişi doğrulama, içinde, casedesenler 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".