3

以下 bash 语法是什么意思:

function use_library {
    local name=$1
    local enabled=1
    [[ ,${LIBS_FROM_GIT}, =~ ,${name}, ]] && enabled=0
    return $enabled
}

我不是特别明白这条线[[ ,${LIBS_FROM_GIT}, =~ ,${name}, ]]。是某种正则表达式还是字符串比较?

4

1 回答 1

4

这是比较变量并防止其中一些未定义/为空时出现奇怪行为的技巧。

您可以使用,或任何其他。主要是它想要比较${LIBS_FROM_GIT}${name}防止其中一个为空的情况。

正如 Etan Reisner 在评论中指出的那样,[[没有空变量扩展问题。所以这个技巧通常在与单个比较时使用[

这不起作用:

$ [ $d == $f ] && echo "yes"
bash: [: a: unary operator expected

但是,如果我们在两个变量周围添加一个字符串,它就可以了:

$ [ ,$d, == ,$f, ] && echo "yes"
$ 

最后,注意你可以直接使用这个:

[[ ,${LIBS_FROM_GIT}, =~ ,${name}, ]] && return 0 || return 1
于 2014-12-15T17:21:20.477 回答