shell 判断变量是否为空,变量加不加双引号的区别

今天使用shell里面的判断输入变量$1是否为空的时候,判断为空的表达式失效,如下

if [ -n $1 ]
then
...
else
...
fi
结果无论是否输入参数都是$1非空,最后和别人代码仔细核对发现变量要用双引号括起来,改成如下


if [ -n "$1" ]
then
...
else
...
fi

就可以了,但是用echo ${#$1}长度确实是0,想不通为什么,等以后弄清楚了再来更新这个博文吧。

===============================================================================================================

2017.06.19更新转载:http://blog.csdn.net/nodeathphoenix/article/details/8989576

Shell  变量用双引号引起来,双引号就是表示这个双引号内为一个字符串。

对于 if 条件语句里所有的字符串的比较时,最好是在变量的外面加上双引号。特别是 if -n 判断字符串是否为null时候(null意思就是字符串长度为0),一定要加上双引号。否则,像下面的case就会出错。

a=""

if [ -n $a ] 等价于 if[ -n ]

对于字符串长度为0时,相当于没有参数,这句总返回为真。明明a的为空串,长度为空,但是却判断出来为非空字符串。

改为if [ -n "$a" ]就没有此问题,可以判断出来为此为空字符串。

 

对于字符串的变量,一个比较特殊的情况,就是数组变量。这个时候变量外面不能用双引号,否则的话,shell会把双引号里的内容当作一个字符串,而不会去以空格分割里面的内容。

arr="12 3 4 5"

for i in $arr  ---当数组用,所以不能加双引号

do

  echo $i

done

 

结果:

1

2

3

4

5

 

arr="12 3 4 5"

for i in "$arr" --加了双引号,就会将$arr的内容作为一个字符串一起输出

do

  echo $i

done

结果:

1 2 3 4 5

 

所以,一般最好是加上双引号, 但是对于数组类型变量,不加双引号。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值