@($ {VAR})是什么意思?

时间:2014-05-23 02:52:03

标签: bash shell unix ksh

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

@(....)是否有某些特殊含义,或者我错过了一些明显的东西?如果测试的例子:

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

由于

2 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:2)

来自bash手册页:

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

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