12 Stimmen

Seltsamkeiten bei der Rücktaste

Ich frage mich, warum das Backspace-Zeichen in gängigen Linux-Terminals die Zeichen nicht wirklich löscht, wenn sie gedruckt werden (was normalerweise funktioniert, wenn sie getippt werden).

Dies funktioniert wie erwartet:

$ echo -e "abc\b\b\bxyz"
xyz

( \b als Backspace ausgewertet wird, kann auch eingefügt werden als Ctrl + V Ctrl + H - dargestellt als ^H ( 0x08 ))

aber wenn nach den Backspaces weniger Zeichen stehen, zeigt sich das seltsame Verhalten:

$ echo -e "abc\b\b\bx"
xbc

verhält sie sich wie die linke Pfeiltaste anstelle der Rücktaste:

$ echo -e "abc\e[D\e[D\e[Dx"
xbc

Löschen der Zeile zurück funktioniert normal:

$ echo -e "abc\e[1Kx"
x

In der Tat, wenn ich tippe Ctrl + V Backspace im Terminal, ^? ( 0x7f ) ergibt sich anstelle von ^H ist dies Del ascii-Zeichen, aber Ctrl + V Del produziert <ESC>[3~ aber das ist eine andere Geschichte

Kann jemand erklären, warum die gedruckte Rücktaste die Zeichen nicht löscht?

(Meine Umgebung ist xterm Linux und einige andere Terminal-Emulatoren, $TERM == xterm versucht vt100 , Linux auch)

23voto

clstrfsck Punkte 14455

Was Sie sehen, ist richtig. Rücktaste oder ^H bewegt den Cursor nach links, ohne zu löschen. Um ein Zeichen zu löschen, müssen Sie Folgendes ausgeben ^H ^H (Rückraum-Raum-Rückraum).


Um Ihren Kommentar zu beantworten: Die Rücktaste ist in der VT100/ANSI-Familie von Terminals so definiert, von der viele Terminal-Kontrollcode-Sequenzen stammen. Siehe das VT100-Benutzerhandbuch aquí die die Funktion von BS wie folgt definiert: "Bewegt den Cursor um eine Zeichenposition nach links, es sei denn, er befindet sich am linken Rand, in diesem Fall erfolgt keine Aktion". Mit anderen Worten, es ist eine Laune der Geschichte :)

Warum es ursprünglich so definiert wurde - ich denke, es ist flexibler, einen nicht-destruktiven Cursor-Bewegungssteuerungscode zu haben, da die destruktive Rücktaste wie oben gezeigt implementiert werden kann.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X