为什么我观察到不同的回声行为?

ron*_*nie 5 bash echo quoting

我观察到 echo 的以下行为

#!/bin/bash

x=" hello"

echo $x
echo "$x"
Run Code Online (Sandbox Code Playgroud)

现在,当我运行上面的代码时,我得到

ronnie@ronnie:~$ bash test.sh
hello
 hello
ronnie@ronnie:~$
Run Code Online (Sandbox Code Playgroud)

所以,有人可以向我解释为什么whitespace在第一种情况下不存在于输出中,并且还指向我定义此行为的文档。

Ser*_*rge 5

这不是echo行为。这是一种 bash 行为。当您使用echo $x表单时,bash 获取以下命令进行处理(?视为空格):

echo??hello
Run Code Online (Sandbox Code Playgroud)

然后,此命令标记化和bash获得两个令牌:echohello这样的输出仅仅是hello

当您使用该echo "$x"表单时,bash 在标记器的输入处具有以下内容:

echo?"?hello"
Run Code Online (Sandbox Code Playgroud)

因此它有两个标记echo?hello,所以输出是不同的。