问题 bash中双方括号的含义[重复]


这个问题在这里已有答案:


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