bash中双方括号的含义

H2O*_*aCl 11 bash

Kyle Brandt的答案中,这个[[ ]]结构被描述为"bash内置测试命令".以下是一个例子.

  if [[ ( $a -gt 2 ) && ( $a -lt 5 ) ]]; then ...
Run Code Online (Sandbox Code Playgroud)

为什么双字括号在字面上是[[ ]]必要的?

vpi*_*lai 8

[[是一个更加多才多艺的版本[在bash中.

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

而且,他们的实现是不同的

-bash-3.2$ type [
[ is a shell builtin
-bash-3.2$ type [[
[[ is a shell keyword
Run Code Online (Sandbox Code Playgroud)

请参阅此处以获得更好的解释

  • 它比那更糟糕; `["$ this">"$ that"]`不会出错,只会做一些与你的预期完全不同的事情.(具体来说:它会将输出重定向到`$ this`指定的文件,然后测试`$ that`是否为空白.) (2认同)

Don*_*sto 3

[[ ]]等于test关键字。

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

对我来说,如果我理解问题的真正含义,问题本身就没有得到很好的阐述。
这些括号必须放在这里,并不是为了确定顺序,而是因为 bash 概要需要它们

编辑

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

[[ ]]使用 against 是[ ]因为您不必担心引用将被读取为变量的测试的左侧。
而且,<也不>需要转义