ステートメントテスト|
として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いですが、それは「機能します」。