Возврат каретки с эхо-командой

9

Я практиковал команду эха с опцией \r(возврат каретки), как показано ниже.

echo -e "This is \r my college"

вывод:

 my college

но когда я добавляю еще одно слово, \rкак показано ниже

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

Тогда это дает мне вывод как:

 my college the

Другой пример

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

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

Итак, я хотел знать, какова реальная цель возврата каретки здесь?

наклонение
источник
Это не воспроизводимо. Вторая команда приводит к выводу ␣my college, как и первая.
Кусалананда
3
echo -eобщеизвестно непортативный. Вы должны, вероятно, использовать printfвместо этого.
tripleee
Связано: unix.stackexchange.com/questions/355559/…
Георгий Василиу

Ответы:

20

Это \rпросто «возврат кареты» - больше ничего. Это означает, что после того, как \rбудет перезаписано начало того, что уже было напечатано.

Например:

echo -e "1234\r56"

Будет отображать:

5634

echoнапечатал, 1234затем вернулся в начало строки и напечатал 56поверх 12.

Для новой строки попробуйте \nвместо этого. Нет необходимости в местах тоже. Например:

echo -e "This is\nmy college"

Который будет выводить:

This is
my college

Возврат каретки полезен для таких вещей:

#!/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

Который будет отображаться dateповерх самого себя, а не создавать новую строку после каждого цикла.

Tigger
источник
1
возврат каретки также используется в предоставляемых sysvinit функциях. Например, функция echo_successиз /etc/init.d/functions.
Тревор Бойд Смит