'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...
371
demandé sur Falko 2012-06-25 20:38:14

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?

391
répondu Keith Thompson 2017-09-11 18:51:56

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"
97
répondu aqn 2015-02-23 21:22:05

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.

66
répondu Sonny 2016-08-11 12:29:11

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.

0
répondu Alexandre Strube 2015-08-07 20:20:03