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

jac*_*hab 8 bash

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

if [[ 1 == 2 ]] ; then echo ok ; fi
Run Code Online (Sandbox Code Playgroud)

什么都不打印,而

if [[ 1==2 ]] ; then echo ok ; fi
Run Code Online (Sandbox Code Playgroud)

版画 ok

che*_*ner 15

"1 == 2"是单个4个字符的字符串,而不是涉及==运算符的表达式.非空字符串在条件表达式的上下文中始终求值为true [[ ... ]].==操作员必须使用空格.

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