shell [ ] 与 [[ ]] 区别

[ ] 与[[ ]] 均可以判断变量是否为空, [ $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"必须被包含在"[ ]"之内。

在使用"[  ]"时,如果使用"&&"或者"||"对多个条件进行连接,"&&"或者"||"必须在"[ ]"之外。

原文地址:https://www.cnblogs.com/lyy3306/p/8507303.html