是否可以在Bash中为case语句生成动态模式?

时间:2016-12-22 13:15:36

标签: bash case-statement

例如,

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

我希望将$a扩展为1|2|3。但似乎无法按预期工作。谢谢你的任何建议。

1 个答案:

答案 0 :(得分:2)

问题是|不是模式的一部分,而是case语句分隔两种模式的语法的一部分。以下方法可行:

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

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

在发生参数扩展之前,|需要对解析器可见,以充当模式分隔符。如果|是由参数扩展产生的,则将其视为文字字符,以作为模式的一部分进行匹配。