$type '[' '[[' 'test'
[ is a shell builtin
[[ is a reserved word
test is a shell builtin
[ 和 test 是 Shell 的内部命令,而 [[ 是Shell的关键字
[ 和 test
[ 和 test 是相等的
$[ 2 < 1 ] && echo True || echo False
zsh: 没有那个文件或目录: 1
False
它就和参数组合为一体被 shell 解释,那样比如 > < 就被 shell 解释为重定向符号
[[
x=1
y=1
$[ $x == 1 && $y == 1 ] && echo True || echo False
-bash: [: missing `]'
False
$[[ $x == 1 && $y == 1 ]] && echo True || echo False
True
$[ $x == 1 -a $y == 1 ] && echo True || echo False
True
在 [[ 中使用 && 和 || 表示逻辑与和逻辑或。[ 中使用 -a 和 -o 表示逻辑与和逻辑或
总结
使用 [[ ... ]] 条件判断结构,而不是 [ ... ],能够防止脚本中的许多逻辑错误。
比如,&&、||、<和> 操作符能够正常存在于[[ ]]条件判断结构中,
但是如果出现在[ ]结构中的话,会报错。比如可以直接使用if [[ $a != 1 && $a != 2 ]]
如果不使用双括号, 则为if [ $a -ne 1] && [ $a != 2 ]或者if [ $a -ne 1 -a $a != 2 ]