来自 bash 手册,关于波形符扩展:
\n\n\n\n\n如果一句话以不带引号的波浪号字符 (\xe2\x80\x98~\xe2\x80\x99) 开头,则直到第一个\n 不带引号的斜杠之前的所有字符(或所有字符,如果没有不带引号的斜杠)被视为波形符前缀。
\n
我想知道为什么~被识别为波形符前缀
$ mypath=/program_files:~/home/t\n$ echo $mypath\n/program_files:/home/t/home/t\nRun Code Online (Sandbox Code Playgroud)\n\nmypath=/program_files:~/home/tbash 的词法分析器将哪些单词拆分成什么?是~/home/t准确地识别为单词?
bash 的词法分析器使用什么单词分隔符将命令分解为单词?是:和= 单词分隔符吗?它们也是文字吗?
谢谢。
\n\n这是源于我无法理解https://unix.stackexchange.com/a/448469/674
\n\n\n\n无法理解 PATH 字符串内的波形符。这就是为什么 POSIX 标准要求在分配 shell 宏时在命令行中的冒号后面扩展波形符序列。
\n
这不是\xe2\x80\x99t分词的结果(更准确地说,是token splitting),它\xe2\x80\x99s是波浪线扩展的结果变量赋值中
\n\n\n\n\n每个变量分配都会检查紧跟在 \xe2\x80\x98:\xe2\x80\x99 或第一个 \xe2\x80\x98=\xe2\x80\x99 后面的未加引号的波形符前缀。在这些情况下,还会执行波形符扩展。
\n
当 bash 将命令分割成标记时,bash 使用的单词分隔符是它的元字符:
\n\n\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
mypath=/program_files:~/home/t\nRun Code Online (Sandbox Code Playgroud)\n\n从 bash\xe2\x80\x99s 的角度来看,是单个标记。
\n