我尝试了这个SO post -How to evaluate a boolean variable in an if block in bash?中的代码,它不起作用。看起来BASH中没有布尔值。是否有一个完美的变通方案可以让我在BASH中设置和检查布尔值?
我的准则-
#!/bin/bash
flag=true
if [ $flag ]
echo 'True'
#flag=false
#echo 'Now changed to false'
fi
即使第2行的flag=false,输出仍然为True。为什么?
3条答案
按热度按时间0yg35tkg1#
尝试不使用方括号,如下所示
4urapxun2#
因为“人的测试”的这一部分它被评估为真-
你需要用一些像-
tcbh2hod3#
设置
要将bash变量
$subject
设置为布尔值true
或false
,请使用subject=true
或subject=false
。要将vash变量设置为空,请使用subject=
、subject=$()
或unset subject
测试
使用单括号和不使用括号是可疑的,我发现在如何计算空字符串、空值以及整数0和1的预期行为中存在一些差异。
首先,定义严格布尔测试的正确行为如下:
true
的if
测试才会计算为true*。对于1
和值为'true'
的任何字符串,此类测试的计算结果为falsefalse
的if
测试才会计算为true。对于0
、null
和空字符串''
,此类测试的计算结果为false完成此操作的正确方法是使用双方括号,并显式地针对
true
或false
进行测试,如下所示:注意,如果你使用这样一个测试布尔真(或假),一个
else
块不仅会覆盖相反的条件,而且会覆盖整个可能的非布尔值false
(或true
)。