'echo' sans retour à la ligne dans un script shell
J'ai un problème avec echo
dans mon script:
echo -n "Some string..."
Imprime
-n Some string...
Et passe à la ligne suivante. Dans la console, cela fonctionne correctement sans nouvelle ligne:
Some string...
4 réponses
Il existe plusieurs versions de la commande echo
, avec des comportements différents. Apparemment, le shell utilisé pour votre script utilise une version qui ne reconnaît pas -n
.
La commande printf
a un comportement beaucoup plus cohérent. echo
est bien pour des choses simples comme echo hello
, mais je suggère d'utiliser printf
pour quelque chose de plus compliqué.
Sur quel système êtes-vous, et quel shell utilise votre script?
bash
a une commande "intégrée" appelée "echo":
$ type echo
echo is a shell builtin
De plus, il existe une commande "echo" qui est un exécutable correct (c'est-à-dire les Forks et execs du shell /bin/echo
, par opposition à l'interprétation de echo
et à l'exécution):
$ ls -l /bin/echo
-rwxr-xr-x 1 root root 22856 Jul 21 2011 /bin/echo
Le comportement du WRT de echo
à \c
et -n
varie. Votre meilleur pari est d'utiliser printf
, qui est disponible sur quatre saveurs *NIX différentes que j'ai regardées:
$ printf "a line without trailing linefeed"
$ printf "a line with trailing linefeed\n"
Essayez avec
echo -e "Some string...\c"
Cela fonctionne pour moi comme prévu (comme je l'ai compris de votre question).
Notez que j'ai obtenu cette information de la man
page. Le man
page note également la coquille peut avoir sa propre version de echo
, et je ne suis pas sûr si bash
a sa propre version.
Si vous utilisez echo dans un if avec d'autres commandes, comme "read", il peut ignorer le paramètre et passer à une nouvelle ligne de toute façon.