为什么 bash 将相邻的空格压缩为一个?

为什么 bash 将相邻的空格压缩为一个?
$ ourSite="super    user"
$ echo $outSite
super user
$ echo "$outSite"
super    user

如果我们不使用双引号来引用变量,bash 会自动将相邻的空格压缩为一个。

我想知道为什么 bash 要这样做?那个变量只是一串字符,将它替换为默认的原始值不是更好吗?

答案1

这里没有进行任何压缩。您的示例:

 echo $outSite

相当于:

echo super    user

echo 命令与所有 shell 命令一样,看不到整个命令行。相反,它看到的是 shell 为其解析的参数数组。就像在 bash(1) 中一样,命令行参数与下一个参数之间用1 个或以上空格。因此,当 shell 解析命令行时,它会逐个提取参数,并将它们传递给 echo。(我们将忽略 echo 不是一个单独的程序这一事实,因为从概念上讲,它就像一个单独的程序。)因此,echo 看到第一个参数“super”和第二个参数“user”,甚至不知道这两个参数之间有多少个空格。它用一个空格分隔符逐个打印它们。另一个命令:

echo "$outSite"

完全等同于

echo "super    user"

通行证参数,并且该参数有嵌入的空格,echo 会乖乖地打印出来。

相关内容