Mi chiedo perché carattere backspace nei terminali comuni di Linux in realtà non cancella i personaggi, in fase di stampa (che funziona normalmente quando digitato) ..Backspace carattere stranezza
Questo funziona come previsto:
$ echo -e "abc\b\b\bxyz"
xyz
(\b
viene valutato come backspace, può essere inserito anche come Ctrl +VCtrl + H - resi come ^H
(0x08
))
, ma quando ci sono meno caratteri dopo i backspace, lo strano comportamento si rivela:
$ echo -e "abc\b\b\bx"
xbc
si comporta come i tasti freccia sinistra invece di backspace:
$ echo -e "abc\e[D\e[D\e[Dx"
xbc
erase line back funziona normalmente:
$ echo -e "abc\e[1Kx"
x
In effetti , Quando si digita Ctrl + VBackspace nel terminale, ^?
(0x7f
) viene ceduto invece di ^H
, questo è Del caratteri ASCII, ma Ctrl + VDel produce <ESC>[3~
, ma è un'altra storia ..
Quindi qualcuno può spiegare perché il carattere backspace stampato non cancella i caratteri?
(Il mio ambiente è xterm Linux e alcuni altri emulatori di terminale, $TERM
== xterm
, tentò vt100
, Linux
pure)
beh, questa non è una spiegazione _why_ il carattere di controllo backspace si comporta come il tasto cursore sinistro, non secondo il senso comune (cancella l'ultimo carattere) – mykhal
ora sono soddisfatto, grazie per il link spec :) – mykhal
Il vero motivo per cui funziona in questo modo è possibile utilizzare terminali ancora più vecchi, "cartacei", che stampano su carta come una macchina da scrivere.Su un terminale del genere non c'è modo di cancellare un personaggio dopo che è stato emesso. I terminali tipo macchina da scrivere sono anche la ragione per cui siamo ancora bloccati con caratteri "carriage return" e "line feed" separati per terminare le linee su Windows. – alexis