$ ourSite="super user"
$ echo $outSite
super user
$ echo "$outSite"
super user
Run Code Online (Sandbox Code Playgroud)
如果我们不使用双引号来引用变量,bash 会自动将相邻的空格压缩为一个。
我徘徊为什么bash要这样做?该变量只是一串字符,默认情况下将变量替换为原来的变量不是更好吗?
这里没有任何压缩。你的例子:
echo $outSite
Run Code Online (Sandbox Code Playgroud)
相当于:
echo super user
Run Code Online (Sandbox Code Playgroud)
与所有 shell 命令一样,echo 命令不会看到整个命令行。相反,它会看到一个由 shell 解析的参数数组。就像 bash(1) 中所说的那样,命令行参数与下一个参数之间用1 个或多个空格分隔。因此,当 shell 解析命令行时,它会一个一个地拉出参数,并将它们传递给 echo。(我们将跳过 echo 不是一个单独的程序这一事实,因为从概念上讲它就像一个程序。)所以 echo 看到第一个参数“super”和第二个参数“user”,甚至不知道有多少个空格分开这两个论点。它用一个空格分隔符一个一个地打印它们。另一个命令:
echo "$outSite"
Run Code Online (Sandbox Code Playgroud)
完全等同于
echo "super user"
Run Code Online (Sandbox Code Playgroud)
传递一个参数,该参数嵌入了空格,这些空格会乖乖地打印出来。
| 归档时间: |
|
| 查看次数: |
455 次 |
| 最近记录: |