2011-04-19 15 views
14

Czy jest możliwe echo backspace w bash?Echoing backspace

Coś

echo $'stack\b' 

Jeżeli nie wyjście stac? Lub czegoś brakuje?

Dokładniej chciałbym użyć tego w:

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

Odpowiedz

25

\b powoduje ruch kursora w lewo, ale nie kasuje znak. Wyprowadź spację, jeśli chcesz ją usunąć.

Dla niektórych dystrybucjach możesz również użyć -e przełącznik echo:

-e  enable interpretation of backslash escapes 

Tak będzie wyglądać

echo -e 'stack\b ' 

również files=(*) ; echo "${#files[@]} items".

+0

Hmm, i oczywiście nie można cofnąć w nowej linii, prawda? Dlatego moje początkowe rozwiązanie nie działa (chyba). Dzięki za fajne rozwiązanie do liczby plików. Dałbym +2, gdybym mógł :-) – sidyll

+0

Dlaczego ta metoda usuwania nie działa w przypadku nowych linii? – Geremia

+0

'\ b' zwraca pojedynczy znak, aż do lewej krawędzi terminala. Nowa linia jest dosłownie * nową linią *, więc druga linia ma swoją własną lewą krawędź. –

1

To nie jest dokładnie to, o co prosisz o, ale również w linii odpowiedzi Ignacio jest, można użyć w tym przypadku:

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

AFAIK nie można wydrukować znak, który usuwa się jeden przed , nawet nie drukując znaku, którego liczba heksadecymana odpowiada na backspace. Możesz jednak wrócić i wydrukować puste miejsce do usunięcia. Dzięki cput możesz robić wiele rzeczy i drukować w dowolnym miejscu na ekranie.

2

Tak aby odpowiedzieć na rzeczywiste pytania o backspace to będzie symulować Backspace:

echo -e "\b \b" 

Będzie przenieść postać z powrotem jeden, potem echo przestrzeń nadpisując cokolwiek charakter nie było, to poruszający powrotem - w efekcie usunięcie poprzedniego znaku. Nie powróci do linii, więc poprzednia wartość nie powinna utworzyć nowej linii:

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