在shell脚本(bash
)中为什么条件得到满足
if [ 1 ]
then
echo should not enter
fi
#Output
should not enter
答案 0 :(得分:7)
bash中的方括号等同于使用括号内的参数调用test
。 man test
说
STRING等效于-n STRING
和
-n STRING STRING的长度非零
,1不是空字符串。 if [ 0 ]
,if [ false ]
和if [ no ]
具有相同的结果,但if [ "" ]
没有。
答案 1 :(得分:2)
可能不明显的是这两者非常不同:
if [ false ]
和
if false
第一个,如thiton和Ignacio Vazquez-Abrams所说,隐式检查字符串 false
是否为空。第二个版本测试命令 false
的退出状态。 (退出状态的测试不是字面上的真/假测试。它检查由数字代码表示的成功或失败。正如您可以想象的那样,false
的退出状态总是失败。这是它的工作。)
有关所有这些内容的更多信息,BashGuide上的Greg's Wiki非常明确。
答案 2 :(得分:1)
因为1
不是空字符串;它有一个字符,数字为“1”。