[] 与 [[]] 均可以判断变量是否为空, [ $a ] [[ $a ]] [ ! $a ] [[ ! $a ]] 无区别
在 Linux 中, 我们可以使用 test 命令判断一个字符串是否为空, test 命令为我们提供了 "-z 选项" 与 "-n 选项", 使用这两个选项可以判断字符串是否为空
"-z 选项" 可以判断指定的字符串是否为空, 为空则返回真, 非空则返回假,-z 可以理解为 zero
"-n 选项" 可以判断指定的字符串是否为空, 非空则返回真, 为空则返回假,-n 可以理解为 nozero
test 中使用 "-n" 或者 "-z" 这些选项判断变量是否为空时, 必须在变量的外侧加上双引号而 [ ] 与 tets 效果相同, 而在 [[ ]] 并不用在变量上加 双引号
使用 test -n 命令判断变量 b 的值是否为空时, 应该返回假, 因为 test 命令的 - n 选项表示指定的字符串非空时, 返回真, 为空时, 返回假, 但是上例中, test -n $b 这条命令的返回值却为真 (应该为假), 这是明显不正确的
在使用 "[[ ]]" 时, 不能使用 "-a" 或者 "-o" 对多个条件进行连接
在使用 "[ ]" 时, 如果使用 "-a" 或者 "-o" 对多个条件进行连接,"-a" 或者 "-o" 必须被包含在 "[ ]" 之内
在使用 "[ ]" 时, 如果使用 "&&" 或者 "||" 对多个条件进行连接,"&&" 或者 "||" 必须在 "[ ]" 之外
来源: http://www.bubuko.com/infodetail-2515908.html