是否可以为 Bash 中的 case 语句生成动态模式?
Is it possible to generate dynamic patterns for case statement in Bash?
例如,
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
|
需要在参数扩展发生之前对解析器可见,以充当模式分隔符。如果 |
是由参数扩展产生的,它将被视为文字字符以作为模式的一部分进行匹配。
例如,
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
|
需要在参数扩展发生之前对解析器可见,以充当模式分隔符。如果 |
是由参数扩展产生的,它将被视为文字字符以作为模式的一部分进行匹配。