Me pregunto por qué carácter de retroceso en los terminales comunes de Linux no se borra realmente los personajes, cuando se imprimen (que funciona normalmente cuando se escribe) ..Retroceso carácter rareza
Esto funciona como se esperaba:
$ echo -e "abc\b\b\bxyz"
xyz
(\b
evalúa para retroceder, se puede insertar también como Ctrl + VCtrl + H - dictada como ^H
(0x08
))
pero cuando hay menos caracteres después de los retrocesos, el comportamiento extraño se revela:
$ echo -e "abc\b\b\bx"
xbc
se comporta como teclas de flecha izquierda en lugar de la tecla de retroceso:
$ echo -e "abc\e[D\e[D\e[Dx"
xbc
borrado la línea posterior funciona normalmente:
$ echo -e "abc\e[1Kx"
x
De hecho , Cuando escribo Ctrl + VRetroceso en terminal, ^?
(0x7f
) es cedido en lugar de ^H
, esto es Del de caracteres ASCII, pero Ctrl + VDel produce <ESC>[3~
, pero es otra historia ...
Entonces, ¿alguien puede explicar por qué el carácter de retroceso impreso no borra los caracteres?
(Mi entorno es xterm de Linux y algunos otros emuladores de terminal, $TERM
== xterm
, intentó vt100
, Linux
también)
bueno, esto no es una explicación _por qué el carácter de control de retroceso se comporta como la tecla del cursor izquierdo, no según el sentido común (borrar el último carácter) – mykhal
ahora estoy satisfecho, gracias por el enlace de especificación :) – mykhal
El motivo REAL funciona de esta manera se debe a los terminales "impresos" aún más antiguos que se imprimen en papel como una máquina de escribir.En tal terminal no hay forma de borrar un carácter una vez que se ha emitido. Los terminales de tipo máquina de escribir también son la razón por la que todavía estamos atrapados con caracteres separados de "retorno de carro" y "avance de línea" hasta las líneas finales en Windows. – alexis