比较Bash脚本中的variables

看看其他的Bash脚本,我看到有人比较像$S == $T这样的variables,而在另一些时候,我看到variables被包装在string中: "$S" == "$T"

一些实验似乎表明,两者都是一样的。 下面的演示将在两种情况下打印equal (用GNU bash,版本4.2.37testing):

 #!/usr/bin/env bash S="text" T="text" if [[ $S == $T ]]; then echo "equal" fi if [[ "$S" == "$T" ]]; then echo "equal" fi 

我的问题:如果$S == $T"$S" == "$T"有区别,那是什么?

如果你使用[[他们几乎是一样的,但不是很…

当使用==和!=运算符时,运算符右侧的字符串被视为一个模式,并根据模式匹配下面描述的规则进行匹配。 […]模式的任何部分可能被引用来强制它被匹配为一个字符串。

如果你使用[那么你必须使用引号,除非你知道变量不能为空或者包含空格。

只是为了安全起见,你可能总是想引用所有的变量。