为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

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

yes

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

yes


正在回答

2 回答

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

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

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

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

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

1 回复 有任何疑惑可以回复我~
#1

libran 提问者

呵呵,一时犯了迷糊,把【-n】的意思理解反了,谢谢指点!
2015-08-22 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信