bash if语句的值为空

时间:2019-03-28 17:55:50

标签: bash null conditional-statements

我的条件如果是gt比较值,并且值也为null,但是我希望gt比较空值,我只希望他只比较值

 res=''
 toto=5
 if [[  "$toto" -gt "$res"  ]]; then
    ... 
   else
    ...
   fi
 fi

解决方案是这样,但不是很好

 if [[ ! -z "$res"  ]]; then
   if [[  "$toto" -gt "$res"  ]]; then
     ... 
   else
     ...
   fi
 fi

2 个答案:

答案 0 :(得分:1)

使用&&

if [[ ! -z "$res" && "$toto" -gt "$res" ]]

您可以进行的其他改进:

  • ! -z替换为-n
  • 删除不必要的报价。
  • 使用((...))进行数值比较。
if [[ -n $res ]] && ((toto > res))

答案 1 :(得分:0)

Shellcheck干净的代码以另一种方式处理空$res

#! /bin/bash

res=''
toto=5
if [[ -z $res ]] ; then
    : # $res is empty so don't compare with $toto
elif ((  toto > res )); then
    echo 'toto is greater than res'
else
    echo 'toto is less than or equal to res'
fi

但是,是否比问题中建议的“不是很好”选项更好还是更坏则值得商bat。通常,更深层的嵌套会更糟,但是最好避免使用if-the-else链。我会在此答案中声明代码的唯一优点是,如果有帮助,它可以方便地放置有用的注释。