2

This question already has an answer here:

I was messing around with the color codes trying to understand how color code is used in bash script and I found that it works fine without including \[\] around it as in here:

This..

red="\033[38;5;203m"
export PS1="$red\u$green\$(__git_ps1)$blue \W"

..gives the same result as that:

red="\[\033[38;5;203m\]"
export PS1="$red\u$green\$(__git_ps1)$blue \W"

So is the second form necessary?

marked as duplicate by muru, Scott, GAD3R, terdon bash Jul 10 at 10:03

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

  • @muru I took a look.. none of that helps with my question. – mdtair Jul 10 at 5:26
  • It doesn't? OP asks "Is this just something I learn to live with? Is there some piece of magic which I should know?" and answer says "Non-printable sequences should be enclosed in [ and ] ... The reason for the behavior is because bash believes the prompt is longer then it actually is." – muru Jul 10 at 5:28
  • As for "I found that it works fine without including []", I'd say you haven't really used your prompt much. Even just browsing history with arrow keys will break it. i.stack.imgur.com/VFOWn.png – muru Jul 10 at 5:30
  • It still works fine without it.. why? That's my question which still hasn't been answered.. which is why it's not a duplicate. – mdtair Jul 10 at 5:38
  • It doesn't work fine. As I said, the prompt breaks easily. – muru Jul 10 at 5:39
3

If your prompt contains non-printing characters that are not enclosed in \[...\], then the shell will miscalculate the width of the prompt.  As a result, it will be confused about where the cursor is, and it will update the display erroneously.  A classic example of this occurs if you type a command so long that it's longer than the window is wide, so it wraps to the next line, and then you backspace back up to the first line.

Not the answer you're looking for? Browse other questions tagged or ask your own question.