如果运算符周围有空格,则test
返回表达式的正确值。
但如果没有空格,它不会抛出任何语法错误并且始终返回 true。
$ test "A" == "A"; echo $?
0 #<-- OK, 0 stands for true
$ test "A" == "B"; echo $?
1 #<-- OK, 1 stands for false
$ test "A"=="A"; echo $?
0 #<-- OK, 0 stands for true
$ test "A"=="B"; echo $?
0 #<-- ??? should either return 1 (false), or throw a syntax error (exit code > 1)
答案1
这是因为语法没有错误:test "A"=="B"
与 相同test foo
,它正在测试一个字符串,并且由于该字符串不为空,因此它返回 true。这在以下test
部分中进行了解释man bash
:
test
并[
使用基于参数数量的一组规则来评估条件表达式。
0 个参数
该表达是错误的。
1 个参数
当且仅当参数不为空时,表达式才为 true。
参数由空格定义,因此由于 周围没有空格==
,因此整个字符串"A"=="B"
将被解析为单个参数。
它正在发挥作用:
$ test foo; echo $?
0
$ test ""; echo $?
1
正如您在上面看到的,传递空字符串将返回 false,但传递非空字符串将返回 true。