Powrót karetki z poleceniem echa

9

Ćwiczyłem polecenie echa z opcją \r(powrót karetki) jak poniżej.

echo -e "This is \r my college"

wynik:

 my college

ale kiedy dodam jeszcze jedno słowo \rjak poniżej

echo -e "This is the \r my college"

Następnie daje mi dane wyjściowe takie jak:

 my college the

Inny przykład

echo -e "This is \r valid data"
 valid data

echo -e "This is not a \r valid data"
 valid data a

Chciałem więc wiedzieć, jaki jest faktyczny cel powrotu karetki tutaj?

Stoczek
źródło
Nie jest to powtarzalne. Drugie polecenie daje wynik ␣my college, podobnie jak pierwsze.
Kusalananda
3
echo -ejest notorycznie niemożliwy do przeniesienia. Prawdopodobnie powinieneś użyć printfzamiast tego.
tripleee
Powiązane: unix.stackexchange.com/questions/355559/…
George Vasiliou

Odpowiedzi:

20

Po \rprostu „powrót karetki” - nic więcej. Oznacza to, co nastąpi po \rzastąpieniu początku tego, co już zostało wydrukowane.

Na przykład:

echo -e "1234\r56"

Wyświetli się:

5634

echowydrukował, 1234a następnie wrócił do początku linii i wydrukował 56na górze 12.

W przypadku nowej linii spróbuj \nzamiast tego. Nie potrzeba też spacji. Na przykład:

echo -e "This is\nmy college"

Co da wynik:

This is
my college

Zwrot karetki jest przydatny w takich przypadkach:

#!/bin/sh
i=0
while [ $i -lt 3 ]
do
    echo -ne "\r"`date` #you should remove new line too
    sleep 1
    i=$(($i + 1))
done
exit

Który wyświetli się datenad sobą zamiast tworzyć nową linię po każdej pętli.

Tygrys
źródło
1
powrót karetki jest również używany w dostarczonych funkcjach sysvinit. Na przykład funkcja echo_successz /etc/init.d/functions.
Trevor Boyd Smith