例如,
a="1|2|3"
b=3
case $b in
$a )
echo in
;;
* )
echo out
;;
*)
esac
我希望将$a
扩展为1|2|3
。但似乎无法按预期工作。谢谢你的任何建议。
答案 0 :(得分:2)
问题是|
不是模式的一部分,而是case
语句分隔两种模式的语法的一部分。以下方法可行:
foo=3
b1=1
b2=2
b3=3
case $foo in
$b1|$b2|$b3) echo match ;;
esac
在发生参数扩展之前,|
需要对解析器可见,以充当模式分隔符。如果|
是由参数扩展产生的,则将其视为文字字符,以作为模式的一部分进行匹配。