我不知道为什么在常见的Linux终端退格键实际上并不删除字符,打印时(通常键入时有效)..退格性格古怪
这按预期工作:
$ echo -e "abc\b\b\bxyz"
xyz
( \b
计算结果为退格,也可以插入作为Ctrl键 + VCtrl键 + ħ - 呈现为^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
实际上当I型按Ctrl + V退格在终端,^?
(0x7f
)的产生,而不是^H
,这是德尔 ASCII字符,但Ctrl键 + V德尔产生<ESC>[3~
,但这是另一回事..
所以有人可以解释为什么打印退格字符不会擦除字符?
(我的环境是Linux的的xterm和其他一些终端仿真器,$TERM
== xterm
,试图vt100
,Linux
为好)
好吧,这不是一个解释_why_退格控制字符的行为像左光标键,而不是根据普通意义上(擦除最后一个字符) – mykhal 2010-05-18 10:51:00
现在我很满意,谢谢你的spec链接:) – mykhal 2010-05-18 11:23:06
真正的原因它的工作原理这种方式是因为更旧的“硬拷贝”终端,像打字机一样在纸上打印。在这样的终端上,一旦输出字符就无法擦除字符。类似打字机的终端也是我们仍然在Windows上使用单独的“回车”和“换行”字符结束行的原因。 – alexis 2012-03-12 13:24:04