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
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