Echo saut de ligne dans le Bash imprime littérale \n
En Bash, essayé ceci:
echo -e "hello\nworld"
Mais il n'a pas l'impression d'un retour à la ligne, seulement \n
. Comment puis-je faire imprimer le retour à la ligne?
Je suis sur Ubuntu 11.04.
- Pour ceux qui disent "qu'il fonctionne pour moi, le comportement de l'écho varie un peu entre les versions. Certains vont même l'impression que le "-e" comme une partie de leur production. Si vous souhaitez un comportement prévisible pour quelque chose de non trivial, utiliser printf place (comme dans @qqch de réponse).
- Je ne pouvais pas obtenir toutes les suggestions dans cette réponse, de travail, parce que, comme il s'avère, j'ai été d'essayer de l'utiliser dans une fonction qui retourne une valeur, et tous l'écho (et printf) les messages dans la fonction ont été ajoutés à la valeur de retour après avoir été individuellement dépouillé de retours à la ligne. Voici une question à ce sujet, avec un très approfondie de réponse: stackoverflow.com/questions/27872069/... C'était comme un cours de trois heures mystery tour.
- Aussi notable: en Unix & Linux Stack Exchange, le a accepté de répondre Comment ajouter de nouvelles lignes lors de l'utilisation de l'écho
- merci pour le lien pour une très bonne et la réponse détaillée en effet! Je pense que c'est mieux que les réponses ci-dessous.
- echo -ne "bonjour\nworld" (vous avez besoin d'une n de drapeau à interpréter échappe) - mais comme disent les autres, différents écho des commandes peut avoir des résultats différents!
- Je suppose que la différence entre ceux qu'elle travaille et ceux qu'il n'a pas est Mac vs Linux.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
printf
à la place:printf
a plus un comportement cohérent queecho
. Le comportement deecho
varie considérablement entre les différentes versions.printf %"s\n" hello world
-- printf va réutiliser le format si de trop nombreux arguments sont donnésecho
qui se passe à l'appui de la-e
option.echo
,-e
est juste imprimé à la sortie elle-même donc je pense que cette réponse est parfaitement valide depuisecho
n'est pas compatible ici (à moins que nous parlons d'une version spécifique).man bash
sous "SHELL BUILTIN COMMANDS"). Ce n'est pas distro-dépendante dans ce cas.printf "#\!/bin/bash > output.sh
travailler à la manière dont je m'attends.printf
commande a été la norme pour assez un certain temps, et est également présent en tant qu'exécutable, dans le cas d'un shell de ne pas l'avoir comme builtin.printf
est considéré comme le portable, choix fiable. Vous avez dit "contrairement à l'écho parfois printf n'est pas sur la distribution"--sont là des exemples concrets de Unix-like (même si généralement pas POSIX-conformes) des systèmes d'exploitation, que les gens utilisent réellement, qui n'ont pas deprintf
commande?printf "%b" "hello\nworld\n"
Également pour en savoir plus: wiki.bash-hackers.org/commands/builtin/printfprintf
. Il faut donc toujours utiliser un format fixe-string, commeprintf %"s\n" hello world
Êtes-vous sûr d'en bash? Fonctionne pour moi, tous les trois façons:
-e
param n'existe pas sur tous les systèmes unixman bash
.echo -e hello\\nworld
help echo
(en bash) montre une autre page qui décrit le bash builtin.man echo
ne l'est pas.imprime
$''
les chaînes utilisent En C ANSI, Citant:Vous pouvez toujours faire
echo ""
.par exemple
echo ""
fonctionne pour moi et je pense que c'est la forme la plus simple pour imprimer une nouvelle ligne, même si cela n'a pas directement répondu à la question. Des acclamations.echo -en "\n"
.echo
est suffisant pour obtenir une ligne videecho ''
ne fonctionne pas btwEn dehors de la chance que quelqu'un trouve se frappant la tête contre le mur en essayant de comprendre pourquoi un collègue de script ne sont pas imprimer les retours à la ligne, look out for this ->
Comme ci-dessus, le fonctionnement réel de la méthode peut être lui-même emballé dans un écho qui remplace tout les échos que peut-être dans la méthode elle-même. Évidemment, je l'ai arrosé cela pour des raisons de concision, il n'était pas si facile à repérer!
Vous pouvez informer vos camarades que d'une meilleure façon d'exécuter des fonctions serait de la sorte:
Essayer
travaillé pour moi dans l'éditeur nano.
Cela fonctionne pour moi dans Raspbian,
POSIX 7 sur echo
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html
-e
n'est pas définie et les barres obliques inverses de mise en œuvre sont définies:sauf si vous avez une option de XSI extension.
Donc, je recommande que vous devriez utiliser
printf
au lieu de cela, ce qui est bien spécifié:la Format De Fichier De Notation:
Également garder à l'esprit que Ubuntu 15.10 et la plupart des distributions de mettre en œuvre
echo
à la fois comme:help echo
which echo
qui peut conduire à une certaine confusion.
Ça marche pour moi dans CentOS:
Une entrée ici pour ceux qui n'ont pas de travail avec l'une de ces solutions, et de la nécessité d'obtenir une valeur de retour à partir de leur fonction:
Uniquement cette tour travaillé dans un linux, je travaille avec ce bash:
Espère que cela aide quelqu'un avec le même problème.
Vous pouvez également le faire:
Cela fonctionne à la fois à l'intérieur d'un script et de la ligne de commande.
Dans la ligne de commande, appuyez sur Maj+Entrée pour faire les sauts de ligne à l'intérieur de la chaîne.
Cela fonctionne pour moi sur mon mac et mon Ubuntu 18.04
Mon script:
De sortie:
Sur mon script bash, je devenais folle comme vous jusqu'à ce que je l'ai juste essayé:
Appuyez simplement sur entrée où vous voulez insérer le saut. La sortie est maintenant:
Cela pourrait être la mieux faite que
option-e va interpréter backslahes pour la séquence d'échappement
-n option supprimer la fin de saut de ligne dans la sortie
PS: la commande echo a un effet de toujours y compris le dernier saut de ligne dans la sortie de sorte que n est requise pour activer cette chose (et le rendre moins déroutant)
Vous pouvez également utiliser echo avec des accolades,
echo hello; echo world
Il y a un nouveau paramètre d'extension ajouté dans
bash 4.4
qui interprète les séquences d'échappement:Parfois, vous pouvez passer plusieurs chaînes de caractères séparés par un espace et il sera interprété comme
\n
.Par exemple lors de l'utilisation d'un script shell pour le multi-ligne de notifcations:
\n
. Il est interprété comme un argument séparé pour le programme, et le programme lui-même peut afficher qu'un argument sur une nouvelle ligne, mais cela ne signifie pas qu'il a été converti à\n
à tout moment et est entièrement dépendante sur le programme.Il suffit de taper
pour obtenir une nouvelle ligne 😉
Dans le cas, Vous avez fait écho à la longue de contenu (tels que le code), avec quelques env var concatination et je voulais faire simple.
echo -e
,printf
pourrait avoir une certaine limitationVous pouvez utiliser un caractère spécial comme un espace réservé pour le saut de ligne (comme
~
)et essayez ce qui suit :
il soit nécessaire d'invoquer un autre programme (
tr
) qui doit être fine de l'OMI.