Retour chariot avec commande echo

9

Je pratiquais la commande echo avec l'option \r(retour chariot) comme ci-dessous.

echo -e "This is \r my college"

production:

 my college

mais quand j'ajoute un mot avant \rcomme ci-dessous

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

Ensuite, cela me donne une sortie comme:

 my college the

Un autre exemple

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

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

Donc, je voulais savoir quel est le but réel du retour en chariot ici?

Tremper
la source
Ce n'est pas reproductible. La deuxième commande entraîne la sortie ␣my college, tout comme la première.
Kusalananda
3
echo -eest notoirement non transférable. Vous devriez probablement utiliser à la printfplace.
tripleee

Réponses:

20

C'est \rjuste ça, un "retour chariot" - rien d'autre. Cela signifie que ce qui est après l' \récrasement écrasera le début de ce qui a déjà été imprimé.

Par exemple:

echo -e "1234\r56"

Affichera:

5634

echoa imprimé 1234puis est retourné au début de la ligne et imprimé 56par-dessus 12.

Pour une nouvelle ligne, essayez à la \nplace. Pas besoin d'espace non plus. Par exemple:

echo -e "This is\nmy college"

Qui produira:

This is
my college

Le retour chariot est utile pour des choses comme ceci:

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

Qui s'affichera dateau-dessus de lui-même au lieu de créer une nouvelle ligne après chaque boucle.

Tigrou
la source
1
le retour chariot est également utilisé dans les fonctions fournies par sysvinit. Par exemple, la fonction echo_successde /etc/init.d/functions.
Trevor Boyd Smith