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

为什么在bash比较运算符周围添加空格会改变结果?,bash,Bash,有人能解释一下为什么==周围的空格会改变比较结果吗?以下是: if [[ 1 == 2 ]] ; then echo ok ; fi 不打印任何内容,而 if [[ 1==2 ]] ; then echo ok ; fi 打印 ok >代码> ,因为它只是一个字符串,请考虑测试: [[ foobar ]] 它将是真的 这有助于测试是否设置了变量,如本例所示: x='foobar' [[ $x ]] # true 现在呢 x='' [[ $x ]] # false 最后 在测试表达式中

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

if [[ 1 == 2 ]] ; then echo ok ; fi
不打印任何内容,而

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

打印<代码> ok >代码>

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

[[ foobar ]]
它将是
真的

这有助于测试是否设置了变量,如本例所示:

x='foobar'
[[ $x ]] # true
现在呢

x=''
[[ $x ]] # false
最后 在测试表达式中,空格是必需的“1==2”是单个4个字符的字符串,而不是包含
=
运算符的表达式。在条件表达式的上下文中,非空字符串的计算结果始终为true。
=
运算符周围必须有空格

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