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

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
gf0710020216
帖子: 66
注册时间: 2008-10-31 17:38
联系:

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

#1

帖子 gf0710020216 » 2013-03-06 14:26

对于非空字符串,一点问题没有:

代码: 全选

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是空时,需要将其添加双引号才能判断成功
平生只做一件事,做自己喜欢做的事!
www.leafonsword.org
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

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

#2

帖子 eexpress » 2013-03-06 15:12

你的shell是bash? 否则不应该。
● 鸣学
头像
aulara
帖子: 87
注册时间: 2013-01-05 16:29
系统: Precise

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

#3

帖子 aulara » 2013-03-06 15:28

什么嘛?

代码: 全选

echo "$a"
它就是个"$a"的字符串,根本不是变量。空的东西就是这样,-z和-n都为真
欢迎光临俺的ubuntu server小站:极光账本 aulara.cn
cao627
帖子: 992
注册时间: 2007-12-05 10:57
系统: ubuntu14.04
来自: 金山

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

#4

帖子 cao627 » 2013-03-06 16:52

代码: 全选

~$ 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的判断为真,如上。没什么其他道理,因为这样,所以这样。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

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

#5

帖子 eexpress » 2013-03-06 23:28

当然是用-z判断啊。
● a="x"; [ -z $a ] && echo ok

● a=""; [ -z $a ] && echo ok
ok
● 鸣学
头像
YeLee
论坛版主
帖子: 26406
注册时间: 2008-08-13 8:48
系统: Fundu i64
来自: 东海硇州,一双管钥。
联系:

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

#6

帖子 YeLee » 2013-03-07 18:28

话说,这东西是判断字串是否为空的吧,而非判断变量是否为空。 :em01 :em01 :em01
◎当我站在道德的高度上俯视别人的时候,发现自己是多么渺小。
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关
头像
needle
帖子: 78
注册时间: 2009-12-01 13:34

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

#7

帖子 needle » 2013-04-05 1:44

bash里的变量,跟java里的String一样~
如一个String引用有null与""之分!!
myshell^_^
xfce4.10最好用了……
舒适的滚轮升起焦点设计,大量快捷键,alt移动,糟糕的桌面图标……
珍爱生命,LFS 三思~
回复