8

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

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

什么都不打印,而

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

印刷ok

4

2 回答 2

15

"1==2" 是单个 4 字符的字符串,不是涉及==运算符的表达式。在条件表达式的上下文中,非空字符串总是计算为真[[ ... ]]。运算符周围必须有空格==

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

于 2013-03-12T15:33:06.283 回答
4

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

[[ foobar ]]

会的true

这对于测试是否设置了变量很有用,如下例所示:

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

现在

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

最后

空格在测试表达式中是强制性的

于 2013-03-12T15:33:05.730 回答