测试返回错误值(但没有错误),具体取决于运算符周围是否存在空格

测试返回错误值(但没有错误),具体取决于运算符周围是否存在空格

如果运算符周围有空格,则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。

相关内容