为什么在bash比较运算符周围添加空格会改变结果?

时间:2013-03-12 15:28:24

标签: bash

有人可以解释为什么==周围的空格会改变比较结果吗?以下内容:

if [[ 1 == 2 ]] ; then echo ok ; fi

没有打印,而

if [[ 1==2 ]] ; then echo ok ; fi

打印ok

2 个答案:

答案 0 :(得分:15)

“1 == 2”是单个4个字符的字符串,而不是涉及==运算符的表达式。在条件表达式[[ ... ]]的上下文中,非空字符串始终求值为true。 ==运算符周围必须有空格。

bash中的其他内容一样,[[ ... ]]的内容只是一个以空格分隔的参数列表。 bash语法不知道如何解析条件表达式,但它确实知道如何解释3个参数的列表,如1==2 [[ ... ]]复合命令的上下文。

答案 1 :(得分:4)

因为它只是一个字符串,请考虑测试:

[[ foobar ]]

它将是true

这对于测试是否设置变量非常有用:

x='foobar'
[[ $x ]] # true

现在

x=''
[[ $x ]] # false

最后

测试表达式

中的空格是强制性的