a="1|2|3"
b=3
case $b in
$a)
echo in
;;
*)
echo out
;;
*)
esac
我想$a
将扩大为1|2|3
。但似乎无法按预期工作。感谢您的任何建议。
a="1|2|3"
b=3
case $b in
$a)
echo in
;;
*)
echo out
;;
*)
esac
我想$a
将扩大为1|2|3
。但似乎无法按预期工作。感谢您的任何建议。
问题是|
不是该模式的一部分,而是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