查看其他Bash脚本,我看到有人比较变量,如:$S == $T
,而有时我看到变量包裹在字符串中:"$S" == "$T"
。
有些实验似乎表明两者都是一样的。以下演示将在两种情况下打印equal
(使用GNU bash,版本4.2.37进行测试):
#!/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"
之间存在差异,那么它是什么?
答案 0 :(得分:6)
如果您使用[[
它们几乎相同,但不完全......
当使用==和!=运算符时,运算符右侧的字符串是 根据Pattern下面描述的规则考虑模式并进行匹配 匹配。 [...] 可以引用模式的任何部分以强制它匹配为字符串。
如果您使用[
,则必须使用引号,除非您知道变量不能为空或包含空格。
为了安全起见,您可能希望始终引用所有变量。