2016-12-22 50 views
0

例如,是否有可能在Bash中为case语句生成动态模式?

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

我想$a将扩大为1|2|3。但似乎无法按预期工作。感谢您的任何建议。

+1

看看这个; http://stackoverflow.com/questions/4687722/dynamic-case-statement-in-bash –

+1

可以通过extglob解决:http://stackoverflow.com/a/13254908/1030675 – choroba

回答

0

问题是|不是该模式的一部分,而是case语句的一部分,该语句将两种模式分开。以下将工作:

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

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

|需要是给解析器可见之前发生参数扩展以用作图案隔板。如果|是通过参数扩展生成的,则它将被视为文字字符以匹配作为模式的一部分。

+0

'case $ b in +($ a ))回声在;; '也可以正常工作,只要'shopt -s extglob'有效。 – sorontar

+0

是的,当我看到@ choroba的评论时,我考虑添加一个注释,但后来决定解释为什么仅在参数中放置一个条不起作用。 – chepner

相关问题