我需要在 bash 提示符中将 ANSI 转义序列括在 \[ 和 \] 中吗?

我需要在 bash 提示符中将 ANSI 转义序列括在 \[ 和 \] 中吗?

我想使用 ANSI 转义代码定制我的 bash 提示符,并注意到在某些操作指南中代码被包含在内\[\]而在其他操作指南中则没有。

例如,这些对我来说同样有效:

PS1='\e[0;32m foo '
PS1='\[\e[0;32m\] foo '

我不知道这有什么区别?

答案1

不同之处在于,如果没有\[and \],bash 将无法跟踪提示符的实际长度,并且各种视觉故障将随着时间的推移而显现出来。

答案2

对此有很好的解释

这些序列将告诉 bash 括起来的字符不占用行上的任何空间,这将允许自动换行继续正常工作。如果没有它们,您最终会得到一个好看的提示符,但如果您碰巧输入了接近终端最右侧的命令,屏幕就会变得混乱。

相关内容