【问题标题】:How to detect null values in shell?如何检测shell中的空值?
【发布时间】:2009-12-12 18:06:47
【问题描述】:

大家好,

我写了这段代码,但它没有捕捉到两个变量中的任何一个为空,为什么?

echo "$var1 - $var2"

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

当我运行我的脚本时,初始回显不会为变量打印任何内容,所以 if 语句应该可以正常工作吗?但出于某种原因,它不会。

【问题讨论】:

  • 实际上问题是“”和关闭]之间没有空格。哇!
  • 你写的是哪个shell?用于便携性的 Bourne shell 还是 Bash?

标签: shell unix


【解决方案1】:

看起来您正在编写 Bash 脚本,因为您使用的是 ==,如果我没记错的话,Bourne 没有。

我了解您的问题是由于括号前缺少空格,但您应该让您的 if 看起来像这样:

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

如果没有其他原因,它执行得更快。但是,双方括号也可以购买additional capabilities

【讨论】:

    【解决方案2】:

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

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

    从手册页引用:

    表达式 1 -o 表达式 2 EXPRESSION1 或 EXPRESSION2 为真 -z 字符串 STRING 的长度为零

    【讨论】:

      【解决方案3】:

      你可以使用 case/esac

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-26
        • 1970-01-01
        相关资源
        最近更新 更多