我想知道为什么普通Linux终端中的退格字符实际上不会在打印时擦除字符(通常在键入时有效).
这按预期工作:
$ echo -e "abc\b\b\bxyz"
xyz
Run Code Online (Sandbox Code Playgroud)
(\b评估为退格,也可以插入Ctrl+ V Ctrl+ H- 呈现为^H(0x08))
但是当退格后的字符数量减少时,会发现奇怪的行为:
$ echo -e "abc\b\b\bx"
xbc
Run Code Online (Sandbox Code Playgroud)
它的行为类似于左箭头键而不是退格键:
$ echo -e "abc\e[D\e[D\e[Dx"
xbc
Run Code Online (Sandbox Code Playgroud)
擦除线后退工作正常:
$ echo -e "abc\e[1Kx"
x
Run Code Online (Sandbox Code Playgroud)
事实上,当我在终端输入Ctrl+ V Backspace时,^?(0x7f)产生而不是^H,这是Delascii字符,但是Ctrl+ V Del产生<ESC>[3~,但它是另一个故事..
那么有人可以解释为什么打印的退格字符不会删除字符吗?
(我的环境是xterm的Linux和一些其他的终端仿真器,$TERM== xterm,试图vt100,Linux以及)