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
版权声明:本文为yummy2009原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。