echo 和终端中的变量扩展

variable expansion in echo and terminal

Bash版本:

debian@debian:~$  bash --version |grep release
GNU bash, version 5.1.4(1)-release (x86_64-pc-linux-gnu)

echo 中的变量扩展:

debian@debian:~$  a=apple
debian@debian:~$  echo '"'$a'
'
"apple

debian@debian:~$

我输入'"'$a'newline',echo将它解析为三个部分'"'$a'newline',所以它是 "apple\n。我分析的与 output.Now 相同,删除 echo 看看会发生什么:

终端中的变量扩展:

debian@debian:~$  '"'$a'
> '
bash: $'"apple\n': command not found

为什么终端将其解析为 $'"apple\n'

当您按回车键将命令行发送到 shell 时,它会执行各种扩展(历史、别名、参数等),从而生成一系列单词。要执行的命令的名称是结果中第一个不包含 = 的单词(或者不是像 time 这样的预定义修饰符)。

在第一个示例中,第一个这样的词是 echo,后面的词是参数。换行符被写入终端,通过将光标移动到下一行的开头来“显示”它。

在第二个示例中,单个词 $'"apple\n' 是第一个这样的词。 $'...' 正是 shell 在其错误消息中显示 一个带有 non-printable 个字符的单词的方式。决定这样做比

更清楚
bash: "apple
: command not found