以下bash语法的含义是什么:
function use_library {
local name=$1
local enabled=1
[[ ,${LIBS_FROM_GIT}, =~ ,${name}, ]] && enabled=0
return $enabled
}
我并不特别理解[[ ,${LIBS_FROM_GIT}, =~ ,${name}, ]]
行。它是某种正则表达式还是字符串比较?
答案 0 :(得分: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