3196 votes

Echo d'une nouvelle ligne dans le littéral d'impression Bash \n

Dans Bash, j'ai essayé ça :

echo -e "Hello,\nWorld!"

Mais il n'imprime pas une nouvelle ligne, seulement \n . Comment puis-je faire en sorte qu'il imprime la nouvelle ligne ?

J'utilise Ubuntu 11.04 (Natty Narwhal).

340 votes

Pour ceux qui disent "ça marche pour moi", le comportement d'echo varie beaucoup entre les versions. Certaines imprimeront même le "-e" comme faisant partie de leur sortie. Si vous voulez un comportement prévisible pour tout ce qui n'est pas trivial, utilisez printf à la place (comme dans la réponse de @sth).

10 votes

Je n'ai pas pu obtenir tout des suggestions de cette réponse, parce qu'il s'avère que j'ai essayé de l'utiliser dans une fonction qui ne fonctionne pas. renvoie une valeur et tous les messages echo (et printf) de la fonction ont été ajoutés à la valeur de retour. après avoir été dépouillés individuellement des nouvelles lignes . Voici une question à ce sujet, avec une réponse extrêmement complète : stackoverflow.com/questions/27872069/ C'était comme une visite mystère de trois heures.

9 votes

A noter également : dans Unix & Linux Stack Exchange, la rubrique réponse acceptée à Comment ajouter de nouvelles lignes en utilisant echo

3809voto

sth Points 91594

Vous pourriez utiliser printf à la place :

printf "hello\nworld\n"

printf a un comportement plus cohérent que echo . Le comportement de echo varie fortement entre les différentes versions.

59 votes

Ou même printf %"s\n" hello world -- printf réutilisera le format si trop d'arguments sont donnés

47 votes

L'OP a demandé echo, pas printf ; et la réponse de @choroba ci-dessous, qui utilise l'option -e, remplit parfaitement ce rôle.

82 votes

@JESii : Il convient si votre echo se trouve à soutenir le -e option.

2189voto

choroba Points 56333

Assurez-vous que vous êtes dans Bash. Ces quatre méthodes fonctionnent pour moi :

echo -e "Hello\nworld"
echo -e 'Hello\nworld'
echo Hello$'\n'world
echo Hello ; echo world

466 votes

Le drapeau -e l'a fait pour moi, ce qui "permet l'interprétation des escapes backslash".

30 votes

Je pense -e param n'existe pas sur tous les OS *nix

16 votes

@kenorb : Il existe dans bash. C'est un buildin.

715voto

Vanuan Points 4751
echo $'hello\nworld'

imprime

hello
world

$'' utilisation des cordes Cotation ANSI C :

Mots de la forme $'_string_' sont traités de manière particulière. Le mot s'étend à chaîne de caractères avec remplacement des caractères antislash comme spécifié par la norme ANSI C.

16 votes

@EvgeniSergeev Pas sûr de ce que vous voulez dire, mais ça n'a pas marché pour moi non plus au début. Et c'est parce que j'utilisais des guillemets doubles et il s'avère que cela ne fonctionne qu'avec des guillemets simples ! J'ai essayé dans Terminal sur Mac.

13 votes

Problèmes avec les variables dans la chaîne de caractères qui ne sont pas développées.

0 votes

Vous pouvez toujours concaténer des chaînes de caractères entre guillemets. ` foo="bar" ; echo $''$foo'efoot'``

187voto

zindigo Points 117

Vous pouvez toujours faire echo "" .

Par exemple,

echo "Hello,"
echo ""
echo "World!"

8 votes

echo "" fonctionne pour moi et je pense que c'est la forme la plus simple pour imprimer une nouvelle ligne, même si cela ne répond pas directement à la question. Merci.

3 votes

Je pense que c'est moins évident (et donc potentiellement plus déroutant) que echo -en "\n" .

102 votes

echo est suffisant pour obtenir une ligne vide

66voto

Uncle Iroh Points 824

Au cas où quelqu'un se retrouverait à se frapper la tête contre le mur en essayant de comprendre pourquoi le script d'un collègue n'imprime pas les nouvelles lignes, faites attention à ceci :

#!/bin/bash
function GET_RECORDS()
{
   echo -e "starting\n the process";
}

echo $(GET_RECORDS);

Comme dans l'exemple ci-dessus, l'exécution de la méthode peut elle-même être enveloppée dans un écho qui remplace tous les échos qui peuvent se trouver dans la méthode elle-même. Évidemment, j'ai édulcoré ce texte pour être plus bref. Ce n'était pas si facile à repérer !

Vous pouvez alors informer vos camarades qu'une meilleure façon d'exécuter les fonctions serait comme ceci :

#!/bin/bash
function GET_RECORDS()
{
   echo -e "starting\n the process";
}

GET_RECORDS;

1 votes

Veillez à entourer la variable de guillemets avant de la faire sortir de la méthode.

Prograide.com

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.

Powered by:

X