在info bash里的第“6.4 Bash Conditional Expressions”节里开头有一句话说明了shell条件判断的二个机制:
Conditional expressions are used by the `[[' compound command and the
`test' and `[' builtin commands.
机制一:内置(builtin)的函数test(运算符[]),此部分完整的说明,可查看“4.1 Bourne Shell Builtins”
机制二:[[]],条件结构关健字,具体可查看“3.2.4.2 Conditional Constructs”
test跟[]是一回事,只不过一个以函数的形式,一个以成对操作符的形式出现,
test包含6.4节条件表达式的表达形式,
是函数就有参数,test对1、2、3.。。6等多个参数的判断分别进行定义
而[[]],大部分的功能跟[]是一样的,可以简单理解成[]的扩展,但对于参数的判断定义上,比test有更完整的定义,不容易出现[]中的错误
比如在-eq比较的右操作符中,[]要求右操作符不为空,否则报错,返回2,而[[]]则不会:
[root@localhost tmp]# [ 1 -eq $a ]
+ '[' 1 -eq ']'
-bash: [: 1: unary operator expected
[root@localhost tmp]# echo