【发布时间】:2010-05-18 10:27:45
【问题描述】:
我想知道为什么普通 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+V Backspace 时,会产生^? (0x7f) 而不是@ 987654330@,这是 Del ascii 字符,但是 Ctrl+V Del 产生<ESC>[3~,但它是另一个故事..
那么有人可以解释为什么打印的退格字符不会删除字符吗?
(我的环境是xterm Linux和其他一些终端模拟器,$TERM == xterm,也试过vt100,Linux)
【问题讨论】: