回答:
それは、bashがプロンプトがそれよりも長いと考えるからです。\e[0;31m
たとえば、エスケープシーケンスはターミナルに吸い込まれ、次のテキストが赤に変わりますが、bashはそれを知りません。したがって、その文字列はプロンプトの長さでカウントされないようにbashに指示する必要があります\[ \]
。また、ターミナルエスケープシーケンスをハードコーディングする代わりにtputを使用することをお勧めします。
red=$(tput setaf 1)
reset=$(tput sgr0)
PS1='\[$red\][\W]\$\[$reset\] '
詳細については、BashFAQ 53およびターミナルコード(ANSI / VT100)の概要を参照してください。
\001 \002
。