bash 的词法分析器使用什么分隔符将命令分解为单词?

Tim*_*Tim 3 bash

来自 bash 手册,关于波形符扩展:

\n\n
\n

如果一句话以不带引号的波浪号字符 (\xe2\x80\x98~\xe2\x80\x99) 开头,则直到第一个\n 不带引号的斜杠之前的所有字符(或所有字符,如果没有不带引号的斜杠)被视为波形符前缀。

\n
\n\n

我想知道为什么~被识别为波形符前缀

\n\n
$ mypath=/program_files:~/home/t\n$ echo $mypath\n/program_files:/home/t/home/t\n
Run Code Online (Sandbox Code Playgroud)\n\n

mypath=/program_files:~/home/tbash 的词法分析器将哪些单词拆分成什么?是~/home/t准确地识别为单词?

\n\n

bash 的词法分析器使用什么单词分隔符将命令分解为单词?是:= 单词分隔符吗?它们也是文字吗?

\n\n

谢谢。

\n\n

这是源于我无法理解https://unix.stackexchange.com/a/448469/674

\n\n
\n

无法理解 PATH 字符串内的波形符。这就是为什么 POSIX 标准要求在分配 shell 宏时在命令行中的冒号后面扩展波形符序列。

\n
\n

Ste*_*itt 5

这不是\xe2\x80\x99t分词的结果(更准确地说,是token splitting),它\xe2\x80\x99s是波浪线扩展的结果变量赋值中

\n\n
\n

每个变量分配都会检查紧跟在 \xe2\x80\x98:\xe2\x80\x99 或第一个 \xe2\x80\x98=\xe2\x80\x99 后面的未加引号的波形符前缀。在这些情况下,还会执行波形符扩展。

\n
\n\n

当 bash 将命令分割成标记时,bash 使用的单词分隔符是它的元字符

\n\n
\n

当不加引号时,用于分隔单词的字符。元字符是空格、制表符、换行符或以下字符之一: \xe2\x80\x98|\xe2\x80\x99、\xe2\x80\x98&\xe2\x80\x99、\xe2\x80\x98 ;\xe2\x80\x99,\xe2\x80\x98(\xe2\x80\x99,\xe2\x80\x98)\xe2\x80\x99,\xe2\x80\x98<\xe2\x80\x99,或 \xe2\x80\x98>\xe2\x80\x99。

\n
\n\n
mypath=/program_files:~/home/t\n
Run Code Online (Sandbox Code Playgroud)\n\n

从 bash\xe2\x80\x99s 的角度来看,是单个标记。

\n