问题解决(1)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/yummy2009/article/details/53672131

 sh使用-n对参数进行判断无效的问题,记录下来.

下面代码无效:

# -n ,非空字符串. #not work. # 长度为非0则为真. 但没有传参数$1也为真.
# -n的逻辑和-z相反,然而-z是正常的,-n却不行.这是为什么 ?
if [  -n $1 ]; then     # -n ,非0, 有参数
       echo "\$1 exist: $1"
else
       echo "not exist."
fi


有参数时可以正常

sh problem_why_-n_not_work.sh ok

$1 exist: ok


但没有参数时,也 -n $1 的值应为 false , 应该走到 else里面去,结果却没有:

sh problem_why_-n_not_work.sh

$1 exist:


这是什么原因导致的?


btw, 用-z 进行判断则正常:

if [ ! -z $1 ] # -z , 空字符串. null  #work  #或者是长度是否为0. 为0则为真.
then
        echo '\$1 exist : $1'
else
        echo "not exist!"
fi


-----

原因可能是  所用的Linux shell 解释器对  -n 解释 , 与 预想的不一致.

-n 是否为'空',可以用下面的-n代码进行验证:

        if [ $EMPTY_TEST ];then
                echo "not empty"
        else
                echo "empty"
        fi

当直接回车的时候, 输出的是
empty

如果用 -n 进行判断 ,  "按说应该是和上面是一样的.但实际上,在所使用的Linux环境下,却不一样."

        read EMPTY_TEST
        if [ -n $EMPTY_TEST ];then
                echo "not empty"
        else
                echo "empty"
        fi

当直接回车的时候, 输出的是
not empty



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值