Echo saut de ligne dans le Bash imprime littérale n
En Bash, essayé ceci:
echo -e "hellonworld"
mais il n'imprime pas une nouvelle ligne, seulement n
. Comment puis-je le faire imprimer la nouvelle ligne?
j'utilise Ubuntu 11.04.
17 réponses
vous pouvez utiliser printf
à la place:
printf "hello\nworld\n"
printf
a un comportement plus cohérent que echo
. Le comportement de echo
varie considérablement entre les différentes versions.
êtes-vous sûr d'être à bash? Ça marche pour moi, des trois façons:
echo -e "Hello\nworld"
echo -e 'Hello\nworld'
echo Hello$'\n'world
echo $'hello\nworld'
imprime
hello
world
$''
strings use ANSI C citant :
les mots de la forme
$'string'
sont traités spécialement. Le mot se développe en chaîne de caractères , avec les caractères échappés par antislash remplacé comme spécifié par la norme ANSI C.
vous pouvez toujours faire echo ""
.
p.ex.
echo "Hello"
echo ""
echo "World"
En 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, regarder dehors pour cela ->
#!/bin/bash
function GET_RECORDS()
{
echo -e "starting\n the process";
}
echo $(GET_RECORDS);
comme dans ce qui précède, le fonctionnement réel de la méthode peut lui-même être enveloppé dans un écho qui remplace tous les échos qui peuvent être dans la méthode elle-même. Évidemment j'ai édulcoré cela pour la brièveté, il n'était pas si facile à repérer!
vous pouvez alors informer votre camarades, qu'une meilleure façon d'exercer ses fonctions serait ainsi:
#!/bin/bash
function GET_RECORDS()
{
echo -e "starting\n the process";
}
GET_RECORDS;
Essayer
echo -e "hello\nworld"
hello
world
a travaillé pour moi dans nano editor.
Cela fonctionne pour moi dans raspbian,
echo -e "hello\nworld"
POSIX 7 on 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:
si le premier opérande est-n, ou si l'un des opérandes contient un caractère
, les résultats sont définis par implémentation.
sauf si vous avez une extension XSI optionnelle.
donc utiliser printf
à la place:
L'opérande de formatdoit être utilisée comme chaîne de format décrite dans la Notation de Format de fichier XBD [...]
le Format de Fichier de Notation :
\n
Déplacer la position d'impression au début de la ligne suivante.
également garder à l'esprit que Ubuntu 15.10 et la plupart des distros mettre en œuvre echo
à la fois comme:
- un Bash intégré:
help echo
- un exécutable autonome:
which echo
ce qui peut conduire à une certaine confusion.
une entrée de plus ici pour ceux qui ne l'ont pas fait fonctionner avec l'une de ces solutions, et ont besoin d'obtenir une valeur de retour de leur fonction:
function foo()
{
local v="Dimi";
local s="";
.....
s+="Some message here $v \n"
.....
echo $s
}
r=$(foo "my message");
echo -e $r;
seulement cette astuce a fonctionné dans un linux sur lequel je travaillais avec cette bash:
GNU bash, version 2.2.25(1)-release (x86_64-redhat-linux-gnu)
espérons qu'il aide quelqu'un avec un problème similaire.
mon script:
echo "WARNINGS: $warningsFound WARNINGS FOUND:\n$warningStrings
sortie:
WARNING : 2 WARNINGS FOUND:\nWarning, found the following local orphaned signature file:
sur mon scénario de bash je devenais fou comme vous jusqu'à ce que je viens d'essayer:
echo "WARNING : $warningsFound WARNINGS FOUND:
$warningStrings"
vient de frapper enter où vous voulez insérer ce saut. La sortie est maintenant:
WARNING : 2 WARNINGS FOUND:
Warning, found the following local orphaned signature file:
vous pouvez aussi utiliser echo avec des attelles,
$ (echo hello; echo world)
hello
world
cela pourrait être mieux fait comme
x="\n"
echo -ne $x
- l'option e interprétera les antislahes pour la séquence d'échappement
- l'option n supprimera la nouvelle ligne dans la sortie
PS: la commande echo a pour effet d'inclure toujours une nouvelle ligne dans la sortie so-n est nécessaire pour éteindre cette chose (et la rendre moins confuse)
vous pouvez aussi faire:
echo "hello
world"
ça marche pour moi sur mes macOS.
parfois, vous pouvez passer plusieurs chaînes séparées par un espace et il sera interprété comme \n
.
par exemple lorsqu'on utilise un script shell pour les notifications multilignes:
#!/bin/bash
notify-send 'notification success' 'another line' 'time now '`date +"%s"`
il y a un nouveau 151970920 "parameter expansion ajouté dans bash 4.4
qui interprète les séquences d'échappement:
${parameter@operator} - E operator
L'expansion est une chaîne qui est la valeur du paramètre avec backslash séquences d'échappement étendues comme avec le
$'…'
citant mécanisme.
$ foo='hello\nworld'
$ echo "${foo@E}"
hello
world