shell脚本中的布尔变量

shell脚本中的布尔变量,shell,boolean,logical-operators,Shell,Boolean,Logical Operators,我关注这个帖子 并开发了一个简单的shell脚本 #!/bin/sh a=false if [[ $a ]]

我关注这个帖子

并开发了一个简单的shell脚本

#!/bin/sh                                                                                                                                                                                                   
a=false
if [[ $a ]];
then
    echo "a is true"
else
    echo "a is false"
fi
输出是

a is true

怎么了?

您需要检查该值是否等于true,而不仅仅是检查变量是否已设置。请尝试以下操作:

if [[ $a = true ]];

您需要检查该值是否等于true,而不仅仅是是否设置了变量。请尝试以下操作:

if [[ $a = true ]];
这不起作用,因为[[仅测试变量是否为空。 你需要写:

if [[ $a = true ]];
而不仅仅是

if [[ $a ]];
这不起作用,因为[[仅测试变量是否为空。 你需要写:

if [[ $a = true ]];
而不仅仅是

if [[ $a ]];
请注意,true和false实际上是bash中的内置命令,因此可以省略条件括号,只需执行以下操作:

if $a; 
更新:阅读后,我撤销了这个建议

如果[[$a]]不能像您期望的那样工作,原因是当[[command]除了结束符之外,只接收一个参数时]],如果参数为非空,则返回值为success。显然字符串false不是空字符串。请参阅和

注意,true和false实际上是bash中的内置命令,因此您可以省略条件括号,只需执行以下操作:

if $a; 
更新:阅读后,我撤销了这个建议

如果[$a]]不能像您预期的那样工作,原因是当[[command]只接收到除结束符之外的单个参数时,如果参数为非空,则返回值为success。很明显,字符串false不是空字符串。请参阅和

if[$a]]不是您链接的问题的任何答案中列出的选项之一。如果[$a]]不是您链接的问题的任何答案中列出的选项之一。