ステートメントテスト|としてaで区切られた異なる文字列で構成される変数を使用しようとしています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、bashの条件として変数を使用できるかどうかを知りたいです。それは可能ですか?
readビットは私を止めました。これはと思われるものである私の意見のユーザー入力の検証、で、caseパターンはすべきではない、評価リストの最上部に表示され、むしろまで剪定する必要があり*、デフォルトのパターンがあるに達するだけの結果が許容保証されるように。それでも、問題は解析/展開の順序であるため、2番目の評価が要求される可能性があります。
eval。glyいですが、それは「機能します」。