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...
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...
Il existe plusieurs versions de l'ouvrage echo
avec des comportements différents. Apparemment le shell utilisé pour votre script utilise une version qui ne reconnaît pas -n
.
Le site printf
a un comportement beaucoup plus cohérent. echo
est très bien 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 ?
J'aimerais qu'il y ait un équivalent Windows dans CMD :( Pour autant que je puisse voir, il n'y en a pas, juste des solutions de contournement pour obtenir le même comportement.
bash
possède 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 véritable exécutable (c'est-à-dire que l'interpréteur de commandes bifurque et exécute /bin/echo
par opposition à l'interprétation echo
et l'exécute) :
$ ls -l /bin/echo
-rwxr-xr-x 1 root root 22856 Jul 21 2011 /bin/echo
Le comportement de l'un ou l'autre echo
de la WRT à \c
et -n
varie. Votre meilleure chance est d'utiliser printf
qui est disponible sur quatre versions différentes de *NIX que j'ai examinées :
$ printf "a line without trailing linefeed"
$ printf "a line with trailing linefeed\n"
C'est une réponse importante, car elle permet de faire la distinction entre echo en tant que commande et echo en tant qu'exécutable, ce qui n'est pas forcément évident lorsqu'on écrit des scripts. Cela signifie que si vous voulez vraiment obtenir le comportement par défaut de l'écho auquel vous êtes habitué, vous pouvez vous assurer que vous utilisez l'exécutable en utilisant /bin/echo -n
pour obtenir l'affichage sans nouvelle ligne. printf
peut être une meilleure option, mais si vous avez l'habitude d'utiliser echo, vous pouvez toujours obtenir la fonctionnalité que vous attendez de cette façon.
Essayez echo -e "Some string...\c"
. Cela fonctionne pour moi comme prévu (c'est-à-dire, comme j'ai compris de votre question). PS : Notez que j'ai obtenu ces informations à partir de la page de manuel. La page de manuel note également que le shell peut avoir sa propre version d'echo, et je ne suis pas sûr que bash ait sa propre version. Quelqu'un ?
+1 pour m'avoir indiqué la bonne direction, bien que l'écho qui ne reconnaît pas l'option -ne ne reconnaît probablement pas non plus l'option -e (ni le besoin), donc vous voudrez probablement dire simplement echo "some string...\c"
à la place. Cependant, si vous devez supporter plusieurs variantes de bash avec des commandes d'écho très différentes, il est probablement préférable d'utiliser printf ou de vérifier les capacités des commandes d'écho avec quelque chose comme [ -n "$( echo -e )" ] && echo "sh stuff\c" || echo -e "bash stuff\c"
(au moins bash supporte \c aussi, donc pas besoin d'utiliser l'option -n, mais vous avez besoin de l'option -e pour bash)
Pour moi, cela fait exactement ce que -n fait dans le cas de l'OP : sortir le littéral -e. Je suppose que printf est en effet plus cohérent
Pour y parvenir, il existe essentiellement deux méthodes que j'utilise fréquemment :
1. Utilisation de la curseur caractère d'échappement ( \c
) avec echo -e
Ejemplo :
for i in {0..10..2}; do
echo -e "$i \c"
done
# 0 2 4 6 8 10
-e
active l'option E les caractères de la chaîne de caractères.\c
apporte le C ursor de retour à la ligne actuelle.OU
2. Utilisation de la printf
commande
Ejemplo :
for ((i = 0; i < 5; ++i)); do
printf "$i "
done
# 0 1 2 3 4
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
2 votes
Quelle implémentation du bourne shell utilisez-vous ? Si j'exécute
bash
en mode bourne shell, cela fonctionne bien ici. De plus, il est peu probable que vous utilisiez réellement un shell bourne comme shell interactif, non ?6 votes
Sur Ubuntu :
echo -ne "text without new line: "; echo "some text";
0 votes
Je sais que c'est très ancien, mais cela fonctionne pour moi sous Windows 10, pour ajouter un point sans nouvelle ligne : echo | set /p=".".