是否可以为 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

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