shell脚本中的布尔变量

Boolean variables in a shell script

本问题已经有最佳答案,请猛点这里访问。

我跟着这个帖子如何在shell脚本中声明和使用布尔变量?

开发了一个简单的shell脚本

1
2
3
4
5
6
7
8
#!/bin/sh                                                                                                                                                                                                  
a=false
if [[ $a ]];
then
    echo"a is true"
else
    echo"a is false"
fi

输出是

1
a is true

怎么了?


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

1
if $a;

< /打击>

最新消息:在阅读了这个极好的答案之后,我撤销了这个建议。

if [[ $a ]]不能像您期望的那样工作的原因是,当[[命令只接收到一个参数(除了结束]]之外),如果参数为非空,返回值为success。显然,字符串"false"不是空字符串。参见https://www.gnu.org/software/bash/manual/bashref.html条件构造和https://www.gnu.org/software/bash/manual/bashref.html bash条件表达式


这不起作用,因为[[只测试变量为空的情况。你需要写作:

1
if [[ $a = true ]];

而不仅仅是

1
if [[ $a ]];


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

1
if [[ $a = true ]];