Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 比较Bash脚本中的变量_Linux_Bash - Fatal编程技术网

Linux 比较Bash脚本中的变量

Linux 比较Bash脚本中的变量,linux,bash,Linux,Bash,查看其他Bash脚本,我看到人们比较变量,比如:$S==$T,而在其他时候,我看到变量被包装在字符串中:“$S”==“$T” 一些实验似乎表明两者的作用相同。下面的演示将在这两种情况下打印equal(使用GNU bash 4.2.37版进行测试): 我的问题:如果$s==$T和“$s”==“$T”之间有区别,那是什么 如果使用[[它们几乎相同,但不完全相同 使用==和!=运算符时,运算符右侧的字符串为 考虑一种模式,并根据模式下描述的规则进行匹配 匹配。[…] 可以引用模式的任何部分,以强制将其

查看其他Bash脚本,我看到人们比较变量,比如:
$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