Backspace-Zeichen Verrücktheit
Frage ich mich, warum die backspace-Zeichen in den üblichen Linux-terminals nicht tatsächlich löschen Sie die Zeichen, wenn es gedruckt wird (was normalerweise funktioniert, wenn eingegeben)..
Dies funktioniert wie erwartet:
$ echo -e "abc\b\b\bxyz"
xyz
(\b
wertet backspace, können eingefügt werden, auch als Strg+V Strg+H - Rendern als ^H
(0x08
))
aber wenn es weniger Zeichen nach dem backspaces, das ungewöhnliche Verhalten enthüllt wird:
$ echo -e "abc\b\b\bx"
xbc
verhält es sich wie Pfeiltasten nach Links statt backspace:
$ echo -e "abc\e[D\e[D\e[Dx"
xbc
löschen Zeile wieder normal funktioniert:
$ echo -e "abc\e[1Kx"
x
In der Tat, wenn ich geben Sie Strg+V Backspace im terminal ^?
(0x7f
) wird, ergab anstatt ^H
ist dies Del ascii-Zeichen, aber Strg+V Del erzeugt <ESC>[3~
, aber das ist eine andere Geschichte..
Also kann mir jemand erklären, warum gedruckte backspace-Zeichen löscht nicht die Zeichen?
(Meine Umgebung ist xterm, Linux und einige andere terminal-Emulatoren, $TERM
= = xterm
versuchte vt100
, Linux
auch)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was Sie sehen, ist richtigen. Die Rücktaste oder die
^H
bewegt den cursor nach Links, kein radieren. Um ein Zeichen zu löschen, müssen Sie die Ausgabe^H ^H
(Backspace-Leerzeichen-Backspace).Beantworten Ihre Kommentar - Backspace ist definiert, der Weg in die VT100/ANSI-Familie von terminals, von denen viele terminal-control-code-Sequenzen zu leihen. Siehe VT100-Handbuch hier definiert die Funktion des BS als "Bewegt den cursor um ein Zeichen nach Links-position, es sei denn, es ist am linken Rand, in welchem Fall keine Aktion tritt". In anderen Worten, es ist eine Laune der Geschichte 🙂
Warum wurde es auf diese Weise definiert zunächst - ich denke, es ist mehr flexibel, um eine zerstörungsfreie cursor-Bewegung Steuer-code, so löschen mit Rücktaste umgesetzt werden können, wie oben gezeigt.
F^HF
Fett ist, ist dieser Ausgang erzeugen vonman
undless
umgehen, versuchenecho -e F^HFO^HOO^HO | less
. Jetzt verstehe ich auch warum, es ist einfach der selbe Zeichen zweimal an der gleichen Stelle.echo -e 'F\bFO\bOO\bO' | less
^H
ist nur die Vertretung von\b
nicht wörtlich zwei Zeichen. Ich denke, dass ich es zeigen, weil das ist, wie es vorgestellt wurde in der Antwort.