这个问题在这里已有答案:
- Bash中单方括号和双方括号之间的区别 6个答案
3771
2018-01-24 08:00
起源
答案:
[[是一个更加多才多艺的版本[在bash中。
例如,使用[[...]]测试构造而不是[...]可以防止脚本中的许多逻辑错误。例如,尽管在[]构造中给出了错误,但&&,||,<和>运算符在[[]]测试中工作。
而且,他们的实现是不同的
-bash-3.2$ type [
[ is a shell builtin
-bash-3.2$ type [[
[[ is a shell keyword
参考 这里 为了一个很好的解释
8
2018-01-24 10:07
它比那更糟糕; [ "$this" > "$that" ] 不会给出错误,它会做一些与你的预期完全不同的事情。 (具体来说:它会将输出重定向到指定的文件 $this,然后测试是否 $that 是非空的。) - Gordon Davisson
答案:
[[是一个更加多才多艺的版本[在bash中。
例如,使用[[...]]测试构造而不是[...]可以防止脚本中的许多逻辑错误。例如,尽管在[]构造中给出了错误,但&&,||,<和>运算符在[[]]测试中工作。
而且,他们的实现是不同的
-bash-3.2$ type [
[ is a shell builtin
-bash-3.2$ type [[
[[ is a shell keyword
参考 这里 为了一个很好的解释
8
2018-01-24 10:07
它比那更糟糕; [ "$this" > "$that" ] 不会给出错误,它会做一些与你的预期完全不同的事情。 (具体来说:它会将输出重定向到指定的文件 $this,然后测试是否 $that 是非空的。) - Gordon Davisson
[[ ]]
等于 test
关键词。
你也可以使用 [ ]
但 [[ ]]
与所有shell类型不兼容
对我来说,如果我理解真正的问题意识,问题本身就没有得到很好的阐述。
这些括号必须在这里不是为了确定订单,而是因为bash概要要求它们
编辑
问题改变了,所以我的回答也是如此。
[[ ]]
用来反对 [ ]
因为您不必担心引用将作为变量读取的测试的左侧。
此外, <
和 >
不需要逃脱
2
2018-01-24 08:05
如果我可以使用 [ ],你是说没有理由使用 [[ ]]。 - H2ONaCl
你是对的,操作的顺序与问题无关,所以我编辑了这个问题以删除任何提及的问题 ( ) 确定操作顺序。 - H2ONaCl
@broiyan:如果你不担心便携,有人支持 [[ ]] 更好,因为你不必担心引用测试的左侧将被读作变量。此外, < 和 > 不需要逃脱 - DonCallisto
@broiyan:看看我的更新 - DonCallisto
快速滚动此链接 wiki.bash-hackers.org/commands/classictest 似乎没有出现任何关于为什么会将方括号加倍的信息。我不知道测试的“左手边”是什么意思。 - H2ONaCl