Bash的本质是虚假的

时间:2013-06-08 03:04:25

标签: bash shell

我今天看到了一些意外的事情。

$ bash -c 'false'
$ echo $?
1 

这是预期的。

$ bash -c '[ false ]'
$ echo $?
0

笏。

同样:

$ if [ false ]; then echo 'true'; fi 
true

我想我明白test a.k.a. [不执行其论点。但是......它真的做什么呢?

4 个答案:

答案 0 :(得分:5)

这是因为test[运行的)不运行其参数,它根据它理解的运算符对其进行评估 - ! = { {1}} != -a等。特别是,与运算符不匹配的任何字符串都是不等于空字符串的测试。 -n是一个无法识别的字符串,因此它与空字符串(不相等)进行比较,因此导致false退出代码...

true会向您展示man test所了解的所有操作符。

答案 1 :(得分:4)

if { false ; } ; then echo TRUE; fi
if ( false ) ; then echo TRUE; fi
if false ; then echo TRUE; fi

所有这些表单都执行false命令。

if [ false ] ; then echo TRUE; fi
if test false ; then echo TRUE; fi

这些不执行任何操作。

答案 2 :(得分:1)

[是一个bash内置命令,与test内置(与/usr/bin/test不同)同义。最基本的测试只是[ string ],如果string不为null或为空,则为true。

您可以找到扩展示例here

答案 3 :(得分:0)

[像任何其他程序一样处理它的参数,它恰好改变它的返回值以更直接地反映它们包含的内容。如果您查看它的手册页,您将看到当运行时只有两个参数(在这种情况下为false]),它将以状态代码零(true)退出,当且仅当如果第一个是非空的而第二个是]。两者都是真的,所以它会成功。