专有命令[ ( 左中括号, 特殊字符). 这个命令与test命令等价, 并且出于效率上的考虑,
这是一个内建命令. 这个命令把它的参数作为比较表达式或者作为文件测试, 并且根据比较的结
果来返回一个退出状态码(0 表示真, 1表示假).
if test condition-true结构与if [ condition-true ] 完全相同. 左中括号,
[ , 是 调用test命令的标识. 而关闭条件判断用的的右中括号, ]
,在if/test结构中并不是严格必需
的, 但是在Bash的新版本中必须要求使用.
test命令在Bash中是内建命令, 用来测试文件类型, 或者用来比较字符串. 因此, 在Bash
脚本中, test命令并不会调用外部的/usr/bin/test 中的test命令, 这是sh-utils工具包中
的一部分. 同样的, [ 也并不会调用/usr/bin/[ , 这是/usr/bin/test 的符号链接.
shell> type test test is a shell builtin shell> type : : is a shell builtin shell> type '[' [ is a shell builtin shell> type '[[' [[ is a shell keyword shell> type ']' bash: type: ]: not found shell> type ']]' ]] is a shell keyword
test, /usr/bin/test, [ ] , 和/usr/bin/[ 都是等价命令
[[ ]]结构比[ ] 结构更加通用. 这是一个扩展的test命令, 是从ksh88 中引进的.在版本2.02的Bash中, 引入了这个扩展命令!
Bash把[[ $a -lt $b ]] 看作一个单独的元素, 并且返回一个退出状态码. 注意[[是一个关键字, 并不是一个命令.
在[[和]]之间所有的字符都不会发生文件名扩展或者单词分割, 但是会发生参数扩展和命令替换.
使用[[ ... ]]条件判断结构, 而不是[ ... ], 能够防止脚本中的许多逻辑错误. 比如,
&&, ||, <, 和> 操作符能够正常存在于[[ ]]条件判断结构中, 但是如果出现在[ ]结构中的话, 会报错.