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

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

我观察到 echo 的以下行为

#!/bin/bash

x=" hello"

echo $x
echo "$x"

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

ronnie@ronnie:~$ bash test.sh
hello
 hello
ronnie@ronnie:~$

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

答案1

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

echo␣␣hello

然后这个命令被标记化并且 bash 得到两个标记:echo因此hello输出只是hello

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

echo␣"␣hello"

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

答案2

您看到不同输出的原因是该echo[1 space]Hello行在语法上等于echo[5 spaces]Hello。空格将被忽略,单词“Hello”将被视为 的参数echo。第一行,以最简单的形式,与您所说的非常相似echo "Hello"。在第二行中,您已明确包含一个前导空格作为echo,的参数的一部分echo " Hello"

在第一行中,您将 5 个字符的字符串传递给echo,在第二行中,您将 6 个字符的字符串传递给echo

因此,事实上,echo在这两种情况下, 的行为是相同的,只是传递给echo它的字符串发生了变化。

相关内容