看看其他的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"
有区别,那是什么?
如果你使用[[
他们几乎是一样的,但不是很…
当使用==和!=运算符时,运算符右侧的字符串被视为一个模式,并根据模式匹配下面描述的规则进行匹配。 […]模式的任何部分可能被引用来强制它被匹配为一个字符串。
如果你使用[
那么你必须使用引号,除非你知道变量不能为空或者包含空格。
只是为了安全起见,你可能总是想引用所有的变量。