代码:
#!/bin/bash
EXISTS=""
echo ${#EXISTS} #print size of string
if [ -n $EXISTS ]; then
echo "It exists!"
else
echo "It is empty."
fi
if [ -z $EXISTS ]; then
echo "It is empty."
else
echo "It exists!"
fi
输出:
0
It exists!
It is empty.
来自man bash
:
-z string
如果字符串的长度为零,则为真。
-n string
如果字符串的长度不为零,则为真。
有人可以向我解释-n的这种行为,为什么它不同意-z?谢谢!
答案 0 :(得分:4)
引用变量或更好地使用BASH中的[[...]]
:
if [[ -n $EXISTS ]]; then echo "It exists!"; else echo "It is empty."; fi
它将打印:
It is empty.
类似地:
if [ -n "$EXISTS" ]; then echo "It exists!"; else echo "It is empty."; fi
It is empty.
答案 1 :(得分:3)
EXISTS=""
if [ -n $EXISTS ]; then
...
fi
[ ... ]
的行为取决于结束]
之前的参数数量。
如果只有一个参数,它会测试该参数是否为非空。由于字符串"-n"
非空,[ -n ]
为真。 -n
仅在其后跟另一个参数时被解释为运算符。
要解决此问题,请引用参数,使其被解释为单个空参数,而不是无参数:
if [ -n "$EXISTS" ]; then
...
fi