#! /bin/bash
echo "Please input 2 nums: "
read a b
if [ -z $b ]; then
echo b is zero !
fi
if [ -n $b ]; then
echo b is non-zero !
fi
运行脚本时,只输入1个数字,而另一个为空,则b应该为空。但结果是印有回声。
-laptop:~$ ./test.sh
Pleaes input 2 nums:
5
b is zero !
b is non-zero !
b是null还是非null?有人可以对此发表评论吗?谢谢!
〜
答案 0 :(得分:4)
替换
if [ -z $b ]; then
与
if [ -z "$b" ]; then
在其他if
条件下也一样。
请参阅http://tldp.org/LDP/abs/html/testconstructs.html进行一些有趣的测试。
答案 1 :(得分:3)
一切都在引号中。我不记得在哪里,但有人最近在SO或USE上解释了这一点 - 没有引号它实际上没有进行空/非空字符串测试,只是检查-n
或-z
是非空字符串本身。这是同样的测试,使这成为可能:
$ var=-n
$ if [ "$var" ]
then
echo whut
fi
返回whut
。
这意味着您还可以进行一种函数式编程:
$ custom_test() {
if [ "$1" "$2" ]
then
echo true
else
echo false
fi
}
$ custom_test -z "$USER"
false
$ custom_test -n "$USER"
true
答案 2 :(得分:1)
-n
测试要求在测试括号内引用该字符串。使用带有! -z
的未加引号的字符串,或者甚至仅在测试括号中单独使用未加引号的字符串通常有效,但这是一种不安全的做法。始终引用经过测试的字符串。
$ b=''
$ [ -z $b ] && echo YES # after expansion: `[ -z ] && echo YES` <==> `test -z && echo YES`
YES
$ [ -n $b ] && echo YES # after expansion: `[ -n ] && echo YES` <==> `test -n && echo YES`
YES
test
反对任何事情,屈服true
。