我今天看到了一些意外的事
$ bash -c 'false'
$ echo $?
1
Run Code Online (Sandbox Code Playgroud)
这是预期的.
$ bash -c '[ false ]'
$ echo $?
0
Run Code Online (Sandbox Code Playgroud)
笏.
同理:
$ if [ false ]; then echo 'true'; fi
true
Run Code Online (Sandbox Code Playgroud)
我想我明白,那test也[不会执行它的论点.但是......它真正做到了什么呢?
这是因为test([运行的是什么)不运行它的参数,它根据它理解的运算符对它进行评估 - ! = != -a -n等等.特别是,任何与运算符不匹配的字符串都是不等于空字符串的测试. false是一个这样一个无法识别的字符串,所以它与空字符串(不相等)进行比较,因此导致true退出代码...
man test会告诉你所有的运营商test都明白.