一位同事最近在一次代码审查中声称,[[ ]]
构造比 [ ]
更受青睐,例如
if [ "`id -nu`" = "$someuser" ] ; then
echo "I love you madly, $someuser"
fi
他无法提供理由。有吗?
最佳答案
[[
的惊喜更少,通常使用起来更安全。但它不是可移植的——POSIX 没有指定它的作用,只有一些 shell 支持它(除了 bash,我听说 ksh 也支持它)。例如,你可以这样做
[[ -e $b ]]
测试文件是否存在。但是对于 [
,您必须引用 $b
,因为它会拆分参数并扩展诸如 "a*"
之类的内容(其中 [[
按字面理解)。这也与 [
可以作为外部程序并像其他程序一样正常接收其参数的方式有关(尽管它也可以是内置程序,但它仍然没有这种特殊处理)。
[[
还有一些其他不错的功能,例如与 =~
匹配的正则表达式以及类似 C 语言的运算符。这是一个很好的页面:What is the difference between test, [
and [[
?和 Bash Tests
关于bash - 在 Bash 中,双方括号 [[ ]] 是否优于单方括号 [ ]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/669452/