问答详情
源自:1-6 shell条件判断式语句之字符串的判断

谁能解释下下面的输出,为什么是yes?

[root@CentOS6 ~]# a="3"

[root@CentOS6 ~]# [ -n $a ] && echo yes || echo no

yes

[root@CentOS6 ~]# [ -n "$a" ] && echo yes || echo no

yes


提问者:libran 2015-08-19 18:32

个回答

  • onemoo
    2015-08-20 11:22:06
    已采纳

    && 的作用是:前面的命令成功执行的话,就再执行后面的命令。若前面的命令失败就不执行后面的命令了。

    || 的作用是:前面的命令失败的话,就再执行后面的命令。若前面的命令成功执行,就不再执行后面的命令了。

    [ ] 括起来的是个判断语句,-n 用来判断后面字符串的长度是否大于零,这里就用来判断a这个参数是否赋过值。

    $a"$a" 这两个写法在这里没有区别,bash shell中默认把他们都作为字符串,加上双引号只是指明了这是字符串。如果字符串中有空格之类的间隔,那么加上双引号才会被认为是一个字符串,否则就是用空格隔开的多个字符串了。

    所以这语句就是判断a变量有没有值,因为是有的,所以执行了&&后的echo yes。又因为成功打印出了yes,所以||后面的echo no就不执行了。

  • RunX_sn
    2018-06-05 20:10:41

    有教程说 [ -z ... ]表示判断是否为空 ; [ -n ... ]表示判断是否为非空 ,等同于 [ ! -z ... ] 。