我今天看到了一些意外的事情。
$ bash -c 'false'
$ echo $?
1
这是预期的。
$ bash -c '[ false ]'
$ echo $?
0
笏。
同样:
$ if [ false ]; then echo 'true'; fi
true
我想我明白test
a.k.a. [
不执行其论点。但是......它真的做什么呢?
答案 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)退出,当且仅当如果第一个是非空的而第二个是]
。两者都是真的,所以它会成功。