有没有办法在 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.
我的要求如下,
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.