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

Eug*_*ash 4 bash prompt

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

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

PS1='\e[0;32m foo '
PS1='\[\e[0;32m\] foo '
Run Code Online (Sandbox Code Playgroud)

我想知道它有什么区别?

Ign*_*ams 8

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


Eug*_*ash 6

这个页面上有很好的解释:

这些序列将告诉 bash 包含的字符不占用行上的任何空格,这将允许自动换行继续正常工作。如果没有它们,您最终会得到一个漂亮的提示,如果您碰巧输入接近终端最右侧的命令,该提示会弄乱屏幕。