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