【问题标题】:Is it possible to generate dynamic patterns for case statement in Bash?是否可以在 Bash 中为 case 语句生成动态模式?
【发布时间】:2016-12-22 13:15:36
【问题描述】:

例如,

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

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

【问题讨论】:

标签: bash case-statement


【解决方案1】:

问题在于| 不是模式的一部分,而是case 语句分隔两个模式的语法的一部分。以下将起作用:

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

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

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

【讨论】:

  • 如果shopt -s extglob 生效,case $b in +($a) ) echo in ;; 也可以正常工作。
  • 是的,当我看到@choroba 的评论时,我考虑添加一个注释,但后来决定解释为什么仅在参数中放置一个条形图不起作用。
猜你喜欢
  • 2017-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-05
  • 1970-01-01
  • 1970-01-01
  • 2020-07-17
  • 1970-01-01
相关资源
最近更新 更多