、Bashでcase文の動的パターンを生成することはできますか?例えば
a="1|2|3"
b=3
case $b in
$a)
echo in
;;
*)
echo out
;;
*)
esac
私は$a
が1|2|3
として展開することにしたいと思います。しかし、それは期待どおりに動作しないようです。ご意見ありがとうございます。
、Bashでcase文の動的パターンを生成することはできますか?例えば
a="1|2|3"
b=3
case $b in
$a)
echo in
;;
*)
echo out
;;
*)
esac
私は$a
が1|2|3
として展開することにしたいと思います。しかし、それは期待どおりに動作しないようです。ご意見ありがとうございます。
|
はパターンの一部ではありませんが、2つのパターンを区切る文の構文の一部です(case
)。以下は機能するであろう:
foo=3
b1=1
b2=2
b3=3
case $foo in
$b1|$b2|$b3) echo match ;;
esac
|
ニーズがパーサーに見えるようにパラメータ展開パターンセパレータとして作用することが発生する前に。 |
がパラメータ展開によって生成された場合、パターンの一部として一致するリテラル文字として扱われます。
これを見てください。 http://stackoverflow.com/questions/4687722/dynamic-case-statement-in-bash –
extglobで解決可能:http://stackoverflow.com/a/13254908/1030675 – choroba