[root@CentOS6 ~]# a="3"
[root@CentOS6 ~]# [ -n $a ] && echo yes || echo no
yes
[root@CentOS6 ~]# [ -n "$a" ] && echo yes || echo no
yes
&& 的作用是:前面的命令成功执行的话,就再执行后面的命令。若前面的命令失败就不执行后面的命令了。
|| 的作用是:前面的命令失败的话,就再执行后面的命令。若前面的命令成功执行,就不再执行后面的命令了。
[ ] 括起来的是个判断语句,-n 用来判断后面字符串的长度是否大于零,这里就用来判断a这个参数是否赋过值。
$a 和 "$a" 这两个写法在这里没有区别,bash shell中默认把他们都作为字符串,加上双引号只是指明了这是字符串。如果字符串中有空格之类的间隔,那么加上双引号才会被认为是一个字符串,否则就是用空格隔开的多个字符串了。
所以这语句就是判断a变量有没有值,因为是有的,所以执行了&&后的echo yes。又因为成功打印出了yes,所以||后面的echo no就不执行了。
有教程说 [ -z ... ]表示判断是否为空 ; [ -n ... ]表示判断是否为非空 ,等同于 [ ! -z ... ] 。