7

为什么当我输入 bash:结果if [ false ]; then echo 'ok'; fi;得到ok字符串?使用变量时我也可以获得类似的结果:ok=false; if [ $ok ]; then echo 'ok'; fi;

4

2 回答 2

10

if [ false ]相当于if [ -n "false" ]- 它正在测试字符串的长度。如果您正在尝试测试 的退出代码/bin/false,请使用if false(no [,对于许多但不是全部,现代 shell 是一个内置的 shell,大致相当于/usr/bin/[or /usr/bin/test)。

于 2012-11-08T17:31:33.943 回答
3

true并且false不是 bash 中布尔值的内置关键字,它们与其他编程语言的方式相同

您可以模拟一个变量的真/假条件的测试,如下所示:

cond1="true"
cond2="false"

if [ "$cond1" = "true" ]; then
    echo "First condition is true"
fi

if [ "$cond2" = "false" ]; then
    echo "Second condition is false"
fi

当你在做:

if [ false ]

它隐式转换为

if [ -n "false" ]

其中-n表示“测试它的长度是否大于 0:如果是,则逻辑为真,否则为逻辑假”

抛开 -truefalse实际做一些事情,但它们是命令:

man true
man false

阅读更多关于他们的信息。

于 2012-11-08T17:34:57.230 回答