Shell脚本变量非空(-z选项)

69

如何使用-z选项确保变量不为空

errorstatus="notnull"
if [ !-z $errorstatus ]
then
   echo "string is not null"
fi

它返回了错误:

./test: line 2: [: !-z: unary operator expected
4个回答

110

当然会有影响。替换变量后,读取的内容为 [ !-z ],这不是有效的 [ 命令。应该使用双引号或者使用[[

if [ ! -z "$errorstatus" ]

if [[ ! -z $errorstatus ]]

./test: 第2行:需要条件二进制运算符 ./test: 第2行:$errorstatus附近的语法错误 ./test: 第2行:`if [[ !-z $errorstatus ]]' - Sreeraj
谢谢,我不小心把!-z放在一起了。 - Sreeraj

31
为什么要使用 -z?为了测试一个字符串是否为空,通常使用 -n:
如果测试 -n "$errorstatus",那么
  echo errorstatus 不是空的
结束

1
我在使用“! -z $1”时获得了更好的结果,我试图测试一个值是否存在。当使用“-n $1”时,我会得到一个错误的结果,因为这个条件每次都是真的,无论$1中是否有值。 - jaketrent
3
当$1为空时,@jtsnake test -n $1为真是因为它相当于test -n,它的结果是真的,因为字符串“-n”不为空。这里的“-n”并不被视为选项,而是test命令要评估的字符串。然而,test -n "$1"可以正常工作。 - William Pursell

3

我认为这是你需要的语法:

if [ -z != $errorstatus ] 
then
commands
else
commands
fi

3
等等,什么?test -z !=?? - Otheus
参数应该加引号,否则当变量为空时会导致不完整的方程式。 - Payam

0

如果 [ !-z $errorstatus ],只需在 ! 和 -z 之间加一个空格,像这样: 如果 [ ! -z $errorstatus ]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接