如何检测shell中的空值?

问题描述:

HI all,如何检测shell中的空值?

我写了这段代码,但它没有捕获任何两个变量为null,为什么?

echo "$var1 - $var2" 

if [ "$var1" == ""] || [ "$var2" == ""] 
then 
    echo "Incomplete data" 
    exit 1 
fi 

当我运行我的脚本,所以if语句应该正常工作时,初始回显为变量打印什么?但它不是因为某种原因。

+1

其实这个问题是存在的“”闭]之间没有空格。哇! – goe 2009-12-12 18:13:13

+0

你在写什么外壳? Bourne shell的便携性还是Bash? – 2009-12-12 18:22:16

||在shell中有不同的含义。另外==不用于比较; =是。也许你的意思是:

if [ -z "$var1" -o -z "$var2" ] 

的手册页引用:

 
EXPRESSION1 -o EXPRESSION2 
       either EXPRESSION1 or EXPRESSION2 is true 

-z STRING 
       the length of STRING is zero 
+0

谢谢,但这不是在这种情况下 – goe 2009-12-12 18:13:46

它看起来像你,因为你正在使用==和Bourne没有写一个bash脚本,如果我没有记错。

我明白你的问题是由于缺乏对括号前空间,但你应该让你的if这个样子的:

if [[ "$var1" == "" || "$var2" == "" ]] 

如果比它的执行速度更快没有其他原因。但是,双方括号也会向您购买additional capabilities

您可以使用情况/ ESAC

case "$var1$var2" in "") echo "null";; esac