了解Bash脚本语法

3
以下bash语法的含义是什么:

什么是以下bash语法的含义:

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

我不是很理解这行代码 [[ ,${LIBS_FROM_GIT}, =~ ,${name}, ]]。它是正则表达式还是字符串比较?


这里的enabled本地变量完全是不必要的。只需将最后一行设为[[ ,${LIBS_FROM_GIT}, =~ ,${name}, ]],就可以对返回值产生相同的影响。 - Etan Reisner
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

1
[[ 不会出现空变量扩展问题。但是,一个空模式总是匹配的。 - Etan Reisner
好观点,@EtanReisner。我已经把这个加入到我的回答中了,谢谢。 - fedorqui
1
根本不需要 && ... 部分。那些是你得到的返回值。 - Etan Reisner
另外,在[[版本中,逗号似乎只是保护一个空的name,使用显式测试可能会更清晰明了,但是我也不确定。 - Etan Reisner
请注意,逗号使其在任一字符串为空时都能正常工作,但如果其中一个包含空格,则无法正常工作。双引号括起来的字符串是更好的方法。 - Gordon Davisson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接