有人可以解释为什么==
周围的空格会改变比较结果吗?以下内容:
if [[ 1 == 2 ]] ; then echo ok ; fi
没有打印,而
if [[ 1==2 ]] ; then echo ok ; fi
打印ok
答案 0 :(得分:15)
“1 == 2”是单个4个字符的字符串,而不是涉及==
运算符的表达式。在条件表达式[[ ... ]]
的上下文中,非空字符串始终求值为true。 ==
运算符周围必须有空格。
与bash
中的其他内容一样,[[ ... ]]
的内容只是一个以空格分隔的参数列表。 bash
语法不知道如何解析条件表达式,但它确实知道如何解释3个参数的列表,如1
,==
和2
[[ ... ]]
复合命令的上下文。
答案 1 :(得分:4)
因为它只是一个字符串,请考虑测试:
[[ foobar ]]
它将是true
。
这对于测试是否设置变量非常有用:
x='foobar'
[[ $x ]] # true
现在
x=''
[[ $x ]] # false
测试表达式
中的空格是强制性的