11

在Kyle Brandt 的回答中的这个问题上,该[[ ]]构造被描述为“bash 内置测试命令”。以下作为示例显示。

  if [[ ( $a -gt 2 ) && ( $a -lt 5 ) ]]; then ...

为什么从字面上看,双方括号是[[ ]]必要的?

4

2 回答 2

8

[[ 是 bash 中 [ 的更通用的版本。

例如,使用 [[ ... ]] 测试构造,而不是 [ ... ] 可以防止脚本中的许多逻辑错误。例如,&&、||、< 和 > 运算符在 [[ ]] 测试中工作,尽管在 [ ] 构造中给出错误。

此外,它们的实现方式也不同

-bash-3.2$ type [
[ is a shell builtin
-bash-3.2$ type [[
[[ is a shell keyword

参考这里以获得很好的解释

于 2013-01-24T10:07:28.483 回答
2

[[ ]]等于test关键字。

您也可以使用[ ][[ ]]不兼容所有 shell 类型

对我来说,如果我理解问题的真正意义,问题本身并没有很好地表述。
这些括号必须在这里不是为了确定订单,而是因为 bash 概要需要它们

编辑

问题变了,所以我的答案也变了。

[[ ]]用于反对,[ ]因为您不必担心引用将作为变量读取的测试的左侧。
而且,<也不>需要逃避

于 2013-01-24T08:05:50.843 回答