【问题标题】:Using "false" in if statement KSH在 if 语句中使用“false” KSH
【发布时间】:2023-11-05 13:00:01
【问题描述】:

我的代码:

if $bVar1 && $bVar2
then
    echo "bVar1 & bVar2 are true"
elif $bVar3 && !$bVar4
then
    echo "bVar3 is true; bVar4 is false"
fi

!$bVar4 部分无法按预期工作。我试过了:

elif $bVar3 && !$bVar4
elif $bVar3 && !${bVar4}
elif $bVar3 && !$(bVar4)

但是当bVar3=truebVar4=false 时,我无法让这条线返回true

为了完整起见,变量分配如下:

bVar3=true
bVar4=false

(当然,我可以像这样在elif 中添加嵌套的if 语句:

if $bVar1 && $bVar2
then
    echo "bVar1 & bVar2 are true"
elif $bVar3
then
    if $bVar4
    then
        : #pass
    else
        echo "bVar3 is true; bVar4 is false"
    fi
fi

但那是不必要的,不是吗?顺便说一句 - 我确实尝试过这个并且这段代码有效。)

【问题讨论】:

  • 空白是你的朋友。你试过! $bVar4吗?
  • @WilliamPursell - 就是这么简单!将其发布为答案,我会接受(记录时间,顺便说一句,5 分钟......!)。

标签: if-statement ksh


【解决方案1】:

Shell 对空格很挑剔。例如,在具有某些设置的交互式 bash shell 中,!$bVar4 将尝试根据 ! 进行历史扩展,但 ! $bvar4 将扩展字符串 $bvar4,尝试执行结果字符串,然后然后否定返回值。在! 之后添加一个空格可能是确保预期语义所必需的。

【讨论】: