Linux 比较Bash脚本中的变量
查看其他Bash脚本,我看到人们比较变量,比如:Linux 比较Bash脚本中的变量,linux,bash,Linux,Bash,查看其他Bash脚本,我看到人们比较变量,比如:$S==$T,而在其他时候,我看到变量被包装在字符串中:“$S”==“$T” 一些实验似乎表明两者的作用相同。下面的演示将在这两种情况下打印equal(使用GNU bash 4.2.37版进行测试): 我的问题:如果$s==$T和“$s”==“$T”之间有区别,那是什么 如果使用[[它们几乎相同,但不完全相同 使用==和!=运算符时,运算符右侧的字符串为 考虑一种模式,并根据模式下描述的规则进行匹配 匹配。[…] 可以引用模式的任何部分,以强制将其
$S==$T
,而在其他时候,我看到变量被包装在字符串中:“$S”==“$T”
一些实验似乎表明两者的作用相同。下面的演示将在这两种情况下打印equal
(使用GNU bash 4.2.37版进行测试):
我的问题:如果
$s==$T
和“$s”==“$T”
之间有区别,那是什么 如果使用[[
它们几乎相同,但不完全相同
使用==和!=运算符时,运算符右侧的字符串为
考虑一种模式,并根据模式下描述的规则进行匹配
匹配。[…]
可以引用模式的任何部分,以强制将其作为字符串进行匹配
如果使用[
,则必须使用引号,除非您知道变量不能为空或包含空格
为了安全起见,您可能想一直引用所有变量。啊,太酷了,是
[…]
和[…]
造成了不同。现在我有了一个起点来查找更多信息。谢谢Karoly!实际上,您应该在[…]中至少双引用正确的操作数
,否则它将被视为一种模式,而不仅仅是一个字符串(例如,如果T='*'
,[[$S==$T]]]
将始终为真)。我建议只需重复引用所有变量,而不是试图跟踪安全与不安全的位置。
#!/usr/bin/env bash
S="text"
T="text"
if [[ $S == $T ]]; then
echo "equal"
fi
if [[ "$S" == "$T" ]]; then
echo "equal"
fi