Shell脚本:如何检查变量是否为空或不存在

34

我想检查变量是否为空。

我的代码是:

    list_Data="2018-01-15 10:00:00.000|zQfrkkiabiPZ||04|
            2018-01-15 10:00:00.000|zQgKLANvbRWg||04|
            2018-01-15 10:00:00.000|zQgTEbJjWGjf||01|
            2018-01-15 10:00:00.000|zQgwF1YJLnAT||01|"

    echo "list_Data"

    if [[ -z "list_Data" ]]
    then
    echo "not Empty"
    else
    echo "empty"
    fi

输出结果为:

2018-01-15 10:00:00.000|zQfrkkiabiPZ||04|
2018-01-15 10:00:00.000|zQgKLANvbRWg||04|
2018-01-15 10:00:00.000|zQgTEbJjWGjf||01|
2018-01-15 10:00:00.000|zQgwF1YJLnAT||01|
empty

变量包含值,但我始终收到空消息,请帮忙解决。


5
你的逻辑颠倒了,“-z”在字符串为空时为真。 - tripleee
4个回答

49

请尝试以下操作,将-z改为-n并在变量前加入$

if [[ -n "$list_Data" ]]
then
    echo "not Empty"
else
    echo "empty"
fi

说明:根据man test页面的描述(它检查变量是否具有任何值。如果它具有任何值,则条件为TRUE,否则为FALSE。)

   -n STRING
          the length of STRING is nonzero

23
if [[ -z "$list_Data" ]]
then
  echo "Empty"
else
  echo "Not empty"
fi

像这样尝试一下。(添加了$并转换了大小写。)


10
您可以在Bash shell中使用以下任何一种方法来确定变量是否具有NULL值。
my_var="DragonBallz"
if [ -z "$my_var" ]
then
      echo "\$my_var is NULL"
else
      echo "\$my_var is NOT NULL"
fi

(或者)

my_var=""
if test -z "$my_var" 
then
      echo "\$my_var is NULL"
else
      echo "\$my_var is NOT NULL"
fi

(或)

[ -z "$my_var" ] && echo "NULL"
[ -z "$my_var" ] && echo "NULL" || echo "Not NULL"

(或者)

[[ -z "$my_var" ]] && echo "NULL"
[[ -z "$my_var" ]] && echo "NULL" || echo "Not NULL"

(或者)

var="$1"
if [ ! -n "$var" ]
then
    echo "$0 - Error \$var not set or NULL"
else
    echo "\$var set and now starting $0 shell script..."
fi

8

当其他所有解决方法都失败了,我没有预料到这个解决方案,但它却对我起作用了。

if [[ "$is_always_execute" == null ]];
then
    is_always_execute=false;
fi

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