web-dev-qa-db-fra.com

'echo' sans nouvelle ligne dans un script shell

J'ai un problème avec echo dans mon script:

echo -n "Some string..."

empreintes

-n Some string...

et passe à la ligne suivante. Dans la console, cela fonctionne correctement sans nouvelle ligne:

Some string...
461
qwertz

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 convient pour des choses simples comme echo hello, mais je suggère d'utiliser printf pour tout ce qui est plus compliqué.

Sur quel système êtes-vous et quel shell votre script utilise-t-il?

488
Keith Thompson

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 approprié (c'est-à-dire les fourches et les exécutants du shell /bin/echo, par opposition à l'interprétation de echo et à son exécution):

$ ls -l /bin/echo
-rwxr-xr-x 1 root root 22856 Jul 21  2011 /bin/echo

Le comportement de WRT de echo sur \c et -n varie. Votre meilleur choix est d'utiliser printf, qui est disponible sur quatre types * NIX différents que j'ai consultés:

$ printf "a line without trailing linefeed"
$ printf "a line with trailing linefeed\n"
125
aqn

Essayer avec

echo -e "Some string...\c"

Cela fonctionne pour moi comme prévu (si j'ai bien compris votre question).

Notez que cette information provient de la page man. La page man indique également que le shell peut avoir sa propre version de echo, et je ne suis pas sûr si bash a sa propre version.

83
Sonny

Si vous utilisez echo dans un if avec d'autres commandes, comme "read", il se peut que le paramètre soit ignoré et qu'il passe de toute façon à une nouvelle ligne.

2
Alexandre Strube

Lorsque vous écrivez et que vous écrivez votre script Shell, mettez toujours la première ligne sous la forme #!/Usr/bin/env bash. Ce shell n'omette ni ne manipule les séquences d'échappement. ex echo "Ceci est la première ligne\n" est imprimé Ceci est la première ligne\n.

0
Amit Singh

Juste pour le linux le plus populaireUbuntu & c'est bash:

  1. Vérifiez quel Shell utilisez-vous? Généralement ci-dessous fonctionne, sinon voir ceci :

    echo $0

  2. Si ci-dessus imprime bash, alors ci-dessous fonctionnera:

    printf "hello with no new line printed at end"
    OU
    echo -n "hello with no new line printed at end"

0