PS1='\\ $ ' 和 PS1='\\\\ $ ' 在 bash 中是相同的

PS1='\\ $ ' 和 PS1='\\\\ $ ' 在 bash 中是相同的

在这两种情况下,PS1='\\ $ '和都会PS1='\\\\ $ '在视觉上产生相同的提示。\ $

为什么?这是一个错误还是记录的行为?

在 bash 5.2.021 和 dash 0.5.12 上测试。我只在 bash 中观察到它,但在 dash 中没有观察到。

答案1

不错的收获。这看起来像是一个错误解码提示字符串在 parse.y 中。

从 PROMPTING 部分中man bash,它指出这\\被视为反斜杠。所以\\\\应该被视为两个反斜杠字符,但在某些时候解码提示字符串调用另一个合并反斜杠的函数,因此这两个反斜杠字符被合并为一个。简而言之,每 4 个连续的反斜杠PS1都会合并为 1 个(当然,只要代码中的逻辑保持不变)。

如果您确实希望提示打印两个连续的反斜杠,则需要再添加 2 个或 4 个反斜杠(PS1='\\\\\\ $ 'PS1='\\\\\\\\ $ ')。

您可以使用以下命令打开错误请求bashbug工具(用于向维护人员报告 Bash 中的错误的实用程序)。

相关内容