Интересно, почему символ возврата в обычные терминалы Linux на самом деле не стирает символы при печати (что обычно работает при вводе).
Это работает так, как ожидалось:
$ echo -e "abc\b\b\bxyz"
xyz
(\b
оценивается как backspace, может быть также вставлен как Ctrl+V Ctrl+H — отображается как ^H
( 0x08
))
но когда после backspaces меньше символов, обнаруживается странное поведение:
$ echo -e "abc\b\b\bx"
xbc
он ведет себя как клавиши со стрелками влево вместо возврата:
$ echo -e "abc\e[D\e[D\e[Dx"
xbc
стереть строку назад работает нормально:
$ echo -e "abc\e[1Kx"
x
На самом деле, когда я набираю Ctrl+V Backspace в терминале, вместо ^H
выдается ^?
(0x7f
), это Del символ ascii, но Ctrl+V Del дает <ESC>[3~
, но это уже другая история..
Так может ли кто-нибудь объяснить, почему напечатанный символ возврата не стирает символы?
(Моя среда - xterm Linux и некоторые другие эмуляторы терминала, $TERM
== xterm
, также пробовал vt100
, Linux
)