2016-12-22 4 views
0

Bashでcase文の動的パターンを生成することはできますか?例えば

a="1|2|3" 
b=3 
case $b in 
$a) 
echo in 
;; 
*) 
echo out 
;; 
*) 
esac 

私は$a1|2|3として展開することにしたいと思います。しかし、それは期待どおりに動作しないようです。ご意見ありがとうございます。

+1

これを見てください。 http://stackoverflow.com/questions/4687722/dynamic-case-statement-in-bash –

+1

extglobで解決可能:http://stackoverflow.com/a/13254908/1030675 – choroba

答えて

0

|はパターンの一部ではありませんが、2つのパターンを区切る文の構文の一部です(case)。以下は機能するであろう:

foo=3 
b1=1 
b2=2 
b3=3 

case $foo in 
    $b1|$b2|$b3) echo match ;; 
esac 
|

ニーズがパーサーに見えるようにパラメータ展開パターンセパレータとして作用することが発生する前に。 |がパラメータ展開によって生成された場合、パターンの一部として一致するリテラル文字として扱われます。

+0

'$ b in +($ a ))echo in ;; 'shopt -s extglob'が有効であれば正しく動作します。 – sorontar

+0

ええ、私は@ chorobaのコメントを見たときにそれについてのメモを追加することを考えましたが、パラメータだけでバーを置くことがうまくいかなかった理由を説明することにしました。 – chepner

関連する問題