$ 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 会乖乖地打印出来。