为什么如果[false];然后回声'确定';网络连接;打印好吗?

时间:2012-11-08 17:27:04

标签: linux bash

为什么当我输入bash:if [ false ]; then echo 'ok'; fi;我得到ok字符串作为结果?使用变量ok=false; if [ $ok ]; then echo 'ok'; fi;

时,我也可以得到类似的结果

2 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:3)

truefalse不是bash中bolean的内置关键字,就像它们用于其他编程语言一样

您可以按如下方式模拟变量的真/假条件测试:

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

详细了解它们。