我的条件如果是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
答案 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链。我会在此答案中声明代码的唯一优点是,如果有帮助,它可以方便地放置有用的注释。