我想知道为什么普通 Linux 终端中的退格字符在打印时实际上并没有擦除字符(通常在键入时有效)..
这按预期工作:
$ echo -e "abc\b\b\bxyz"
xyz
(\b
计算为退格,也可以插入为Ctrl++ - 呈现为( V Ctrl) )H^H
0x08
但是当退格后的字符较少时,就会出现奇怪的行为:
$ echo -e "abc\b\b\bx"
xbc
它的行为类似于左箭头键而不是退格键:
$ echo -e "abc\e[D\e[D\e[Dx"
xbc
擦除回线正常工作:
$ echo -e "abc\e[1Kx"
x
事实上,当我在终端输入Ctrl+时,产生的是( ) 而不是,这是ascii 字符,但+产生的是 ,但这是另一回事。V Backspace^?
0x7f
^H
DelCtrlV Del<ESC>[3~
那么有人可以解释为什么打印的退格字符不会擦除字符吗?
(我的环境是 xterm Linux 和其他一些终端模拟器,$TERM
== ,xterm
也试过)vt100
Linux