【发布时间】:2013-01-24 08:00:03
【问题描述】:
在这个question in the answer from Kyle Brandt [[ ]] 构造被描述为“bash 内置测试命令”。下面作为示例显示。
if [[ ( $a -gt 2 ) && ( $a -lt 5 ) ]]; then ...
为什么需要双方括号,即[[ ]]?
【问题讨论】:
标签: bash
在这个question in the answer from Kyle Brandt [[ ]] 构造被描述为“bash 内置测试命令”。下面作为示例显示。
if [[ ( $a -gt 2 ) && ( $a -lt 5 ) ]]; then ...
为什么需要双方括号,即[[ ]]?
【问题讨论】:
标签: bash
[[ 是 bash 中 [ 的更通用版本。
例如,使用 [[ ... ]] 测试构造而不是 [ ... ] 可以防止脚本中的许多逻辑错误。例如,&&、||、 运算符在 [[ ]] 测试中工作,尽管在 [] 构造中给出错误。
另外,它们的实现方式不同
-bash-3.2$ type [
[ is a shell builtin
-bash-3.2$ type [[
[[ is a shell keyword
请参考here 以获得更好的解释
【讨论】:
[ "$this" > "$that" ] 不会出错,它只会做一些与你预期完全不同的事情。 (具体:将输出重定向到$this指定的文件,然后测试$that是否为非空。)
[[ ]] 等于 test 关键字。
您也可以使用[ ],但[[ ]] 并非与所有外壳类型都兼容
对我来说,如果我理解问题的真正含义,那么问题本身并没有很好地表述。
这些括号必须在这里不是为了确定顺序,而是因为 bash 概要需要它们
问题变了,所以我的回答也是。
[[ ]] 用于[ ],因为您不必担心引用将作为变量读取的测试的左侧。
而且<和>不需要转义
【讨论】:
[ ],你是说永远没有理由使用[[ ]]。
( ) 确定操作顺序的内容。
[[ ]]更好,因为你不必担心引用左侧的测试会被读取作为变量。而且<和>不需要转义