2011-04-19 12 views
14

E 'possibile echo un backspace in bash?Echoing di un backspace

Qualcosa di simile

echo $'stack\b' 

Non dovrebbe uscita stac? O mi manca qualcosa?

Più in particolare, mi piacerebbe usare che in:

ls | wc -l; echo $'\b items' 

risposta

25

\b fa muovere cursore a sinistra, ma non cancella il carattere. Emetti uno spazio se vuoi cancellarlo.

Per alcune distribuzioni si può anche essere necessario utilizzare -e interruttore di echo:

-e  enable interpretation of backslash escapes 

Così sembrerà

echo -e 'stack\b ' 

Inoltre, files=(*) ; echo "${#files[@]} items".

+0

Hmm, e ovviamente non è possibile backspace su una nuova riga, giusto? Ecco perché la mia soluzione iniziale non ha funzionato (credo). Grazie per la bella soluzione per il conteggio dei file. Darei +2 se potessi :-) – sidyll

+0

Perché questo metodo di eliminazione non funziona per le nuove righe? – Geremia

+0

'\ b' torna indietro di un singolo carattere, fino al bordo sinistro del terminale. Una nuova riga è letteralmente una * nuova riga *, quindi la seconda riga ha il suo bordo sinistro. –

1

non è esattamente quello che stai chiedendo, ma anche, nella linea di risposta di Ignacio, è possibile utilizzare per questo caso:

echo "$(ls | wc -l) items" 

per quanto ne so non è possibile stampare un personaggio che cancella quello precedente , nemmeno stampando il carattere il cui numero esadecimanl corrisponde al backspace. Puoi comunque tornare indietro e stampare uno spazio vuoto da eliminare. Con cput puoi fare molte cose e stampare dove vuoi sullo schermo.

2

Quindi, per rispondere alla domanda reale circa backspace questo simulerà un backspace:

echo -e "\b \b" 

Sarà muovere il personaggio indietro di un, then echo uno spazio di sovrascrivere qualunque personaggio era lì, per poi passare di nuovo - a tutti gli effetti cancellando il carattere precedente. Non tornerà su una riga anche se l'output prima non dovrebbe creare una nuova riga:

echo -n "blahh"; echo -e "\b \b"