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?

Respuestas:
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.fuente
Se explica muy bien en esta página :
fuente