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...
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?
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"
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.
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.
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.
Juste pour le linux le plus populaireUbuntu
& c'est bash
:
Vérifiez quel Shell utilisez-vous? Généralement ci-dessous fonctionne, sinon voir ceci :
echo $0
Si ci-dessus imprime bash
, alors ci-dessous fonctionnera:
printf "hello with no new line printed at end"
OUecho -n "hello with no new line printed at end"