¿Necesito encerrar secuencias de escape ANSI en \ [y \] en un indicador de bash?

4

Quiero personalizar mi solicitud de bash utilizando códigos de escape ANSI y he notado que en algunos procedimientos los códigos están encerrados \[y \]en otros no.

Por ejemplo, estos funcionan igualmente bien para mí:

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

Me pregunto qué diferencia hace?

Eugene Yarmash
fuente
1
Por favor, no publiques .
Dennis Williamson

Respuestas:

8

La diferencia es que en los que no tienen \[y \], bash no podrá rastrear la longitud real del mensaje y varios problemas visuales se revelarán con el tiempo.

Ignacio Vazquez-Abrams
fuente
6

Se explica muy bien en esta página :

Estas secuencias le dirán a bash que los caracteres encerrados no ocupan espacio en la línea, lo que permitirá que el ajuste de palabras continúe funcionando correctamente. Sin ellos, terminarás con un mensaje atractivo que desordenará la pantalla si escribes un comando que se aproxima a la extrema derecha del terminal.

Eugene Yarmash
fuente