Soweit ich mich erinnere, ^H
bedeutet Backspace. Ich habe es durch Drücken von CTRL+V, CTRL+H.
Das ^H
sollte also das letzte Zeichen entfernen, da es dasselbe ist wie Backspaceund es sollte so tun, als ob ich Backspacean dieser Position gedrückt hätte.
Warum das nicht der Ausgang echo abc^H
bleiben abc
und nicht ab
?
shell
terminal
special-characters
Michael
quelle
quelle
^H
bedeutet "Cursor links eins".Antworten:
backspace bewegt den Cursor nur rückwärts.
backspace(oder ein deletebeliebiges Zeichen, abhängig von der Konfiguration) löscht das zuletzt gedruckte Zeichen nur, wenn diese Bedingungen erfüllt sind:
echo
in Ihrem Beispiel ausgegebenWenn Sie das cin Ihrem Beispiel löschen möchten , müssen Sie es durch ein anderes Zeichen überschreiben, zum Beispiel:
quelle
echo "abc^H "
hat es bei mir nicht einmal funktioniertecho -e "abc\b "
. Ich kann nicht herausfinden, warum^H
es nicht funktioniert. ps. Meine Shell ist Bash 4.1.5.^H
indem Sie eingebenCtrl-V
,Ctrl-H
Durch Eingabe von ^ V ^ H fügen Sie einen Backspace-Code in die Zeichenfolge ein, ohne einen Backspace-Befehl auszugeben. ^ H muss kein destruktiver Rückraum sein; Einige Software verwendet es zum Überdrucken.
Nachträglicher Gedanke: Die Ersteller von echo (1) haben argumentiert, dass Sie, wenn Sie ^ V und einen Steuercode eingeben, dies tun, weil Sie möchten, dass ein anderer Prozess, nicht echo (1), den Steuercode analysiert. Im Fall von Strg-H setzt echo (1) 0x08 in die Ausgabezeichenfolge und zeigt dies mit einem Caret und einem H. Wenn die Zeichenfolge zu etwas umgeleitet wird, das 0x08 als destruktiven Rückraum in seinem EINGANG PARSIERT, erhalten Sie möglicherweise das erwünschtes Ergebnis.
quelle
$'\b'
was die Shell in eine 0x08 konvertiert und an das Programm oder einen anderen Befehl übergibt.stty erase ^H
das sollte es lösen.quelle