【问题标题】:What is the meaning of @(${VAR})?@(${VAR}) 是什么意思?
【发布时间】:2014-05-23 02:52:02
【问题描述】:

在查看一些 shell 脚本时,我遇到了几个 if 语句实例,将一些普通变量与另一个包含在 @( ) 括号中的变量进行比较。

@(....) 有什么特殊含义还是我在这里遗漏了一些明显的东西? if 测试示例:

if [[ ${VAR} != @(${VAR2}) ]]

谢谢

【问题讨论】:

    标签: bash shell unix ksh


    【解决方案1】:

    这是一个扩展模式,借用自 ksh。最初您需要使用shopt -s extglob 启用对它的支持,但它在bash 4.1 中成为[[ ... ]] 内部的默认行为。 @(...) 匹配包含的模式之一。 @(pattern)pattern 本身是等价的,所以我假设 $VAR2 的内容至少包含一个管道,因此扩展类似于 @(foo|bar)。在这种情况下,如果$VAR1 匹配foobar,则测试将成功。

    【讨论】:

    • +1;很高兴了解 4.1 中默认行为的变化。
    • +1:我什至不知道存在这种扩展。看着我perl
    • 请注意,4.1 的手册页似乎暗示只有 !(...) 需要设置 extglob,但这在 4.2 中再次得到修复。
    【解决方案2】:

    来自bash 手册页:

             @(pattern-list)
                     Matches one of the given patterns
    

    所以${VAR2} 应该是由| 分隔的模式列表,您的代码会测试${VAR} 是否与其中任何一个匹配。

    【讨论】:

      猜你喜欢
      • 2014-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-20
      • 2018-11-24
      • 2021-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多