分页: 1 / 1

bash判断变量是空字符串的怪问题!

发表于 : 2013-03-06 14:26
gf0710020216
对于非空字符串,一点问题没有:

代码: 全选

a='123'
if [ -z $a ];then echo '1' ;else echo '2';fi
if [ -n $a ];then echo '1' ;else echo '2';fi
返回2和1
可是当a为空字符串时

代码: 全选

a=''
if [ -z $a ];then echo '1' ;else echo '2';fi
if [ -n $a ];then echo '1' ;else echo '2';fi
出现错误判断了,都返回1;结果发现$a需要加"$a"

代码: 全选

a=''
if [ -z "$a" ];then echo '1' ;else echo '2';fi
if [ -n "$a" ];then echo '1' ;else echo '2';fi
就正常了,返回1和2;但问题是为什么$a是空时,需要将其添加双引号才能判断成功

Re: bash判断变量是空字符串的怪问题!

发表于 : 2013-03-06 15:12
eexpress
你的shell是bash? 否则不应该。

Re: bash判断变量是空字符串的怪问题!

发表于 : 2013-03-06 15:28
aulara
什么嘛?

代码: 全选

echo "$a"
它就是个"$a"的字符串,根本不是变量。空的东西就是这样,-z和-n都为真

Re: bash判断变量是空字符串的怪问题!

发表于 : 2013-03-06 16:52
cao627

代码: 全选

~$ if [ -n  ];then echo '1' ;else echo '2';fi
1
~$ if [ -n "" ];then echo '1' ;else echo '2';fi
2
当a为空时,$a展开后[ -n $a ]变为[ -n ] ,而[ -n ] 在bash的判断为真,如上。没什么其他道理,因为这样,所以这样。

Re: bash判断变量是空字符串的怪问题!

发表于 : 2013-03-06 23:28
eexpress
当然是用-z判断啊。
● a="x"; [ -z $a ] && echo ok

● a=""; [ -z $a ] && echo ok
ok

Re: bash判断变量是空字符串的怪问题!

发表于 : 2013-03-07 18:28
YeLee
话说,这东西是判断字串是否为空的吧,而非判断变量是否为空。 :em01 :em01 :em01

Re: bash判断变量是空字符串的怪问题!

发表于 : 2013-04-05 1:44
needle
bash里的变量,跟java里的String一样~
如一个String引用有null与""之分!!