有没有办法在 bash 中分配 bool 变量?

Is there a way to assign bool variable in bash?

我的要求如下,

if cond1 is true; then
    if [[ val1 -lt val2 ]]; then
        call_x_func
        call_y_func
        call_z_func
    fi
else
    if [[ val1 != val2 ]]; then
        call_x_func
        call_y_func
        call_z_func
    fi
fi

从上面可以看出,如果 cond1 为真,则使用运算符 -lt,否则使用 !=。循环内的内容保持不变。为了实现这一点,我试图在下面做但无法将 bool 值分配给 bash 变量。这样做的最佳方法是什么?

need_change=false
if cond1; then
    need_change=[[ val1 -lt val2 ]]
else
    need_change=[[ val1 != val2 ]] 
fi

if $need_change; then
    call_x_func
    call_y_func
    call_z_func
fi

我经常使用"true"和"false",因为它们也只是分别return成功和失败的命令。然后你可以做

cond1=false
if "$cond1"; then ...fi

这是你要找的东西:

need_change=false
cond1=true
if "$cond1"; then
    if [[ val1 -lt val2 ]]; then need_change="true"; else need_change="false"; fi
else
    if [[ val1 -ne val2 ]]; then need_change="true"; else need_change="false"; fi
fi

if "$need_change"; then
    .
    .
fi

由于 bash 没有 bool 数据类型,我建议您通过将数值 0 解释为 true,将任何其他值解释为 false 来对 bool 建模。通过这样做,您可以轻松地将程序的退出代码用作布尔值。例如:

need_change=1  # set to false
((val1 < val2)) # Test the values
need_change=$? # Set to true or false, according to the outcome of the test
  # or:
need_change=$((val1 < val2)) # Alternative way to achieve this result.