2

查看其他 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",那是什么?

4

1 回答 1

5

如果您使用[[它们几乎相同,但不完全...

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

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

为了安全起见,您可能希望一直引用所有变量。

于 2013-04-25T08:00:11.050 回答