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'
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'
\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"
.
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.
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"
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
Dlaczego ta metoda usuwania nie działa w przypadku nowych linii? – Geremia
'\ 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ź. –