在bash中,为什么[1]不会失败?

时间:2011-11-12 23:50:18

标签: bash shell if-statement

在shell脚本(bash)中为什么条件得到满足

if [ 1 ]
then
 echo should not enter
fi

#Output
should not enter

3 个答案:

答案 0 :(得分:7)

bash中的方括号等同于使用括号内的参数调用testman test

  

STRING等效于-n STRING

  

-n STRING       STRING的长度非零

,1不是空字符串。 if [ 0 ]if [ false ]if [ no ]具有相同的结果,但if [ "" ]没有。

答案 1 :(得分:2)

可能不明显的是这两者非常不同:

if [ false ]

if false

第一个,如thitonIgnacio Vazquez-Abrams所说,隐式检查字符串 false是否为空。第二个版本测试命令 false的退出状态。 (退出状态的测试不是字面上的真/假测试。它检查由数字代码表示的成功或失败。正如您可以想象的那样,false的退出状态总是失败。这是它的工作。)

有关所有这些内容的更多信息,BashGuide上的Greg's Wiki非常明确。

答案 2 :(得分:1)

因为1不是空字符串;它有一个字符,数字为“1”。