Dans Bash, j'ai essayé ceci:
echo -e "hello\nworld"
Mais il n’imprime pas de nouvelle ligne, seulement \n
. Comment puis-je le faire imprimer la nouvelle ligne?
J'utilise Ubuntu 11.04.
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 d'une version à l'autre.
Êtes-vous sûr que vous êtes en bash? Fonctionne pour moi de trois façons:
echo -e "Hello\nworld"
echo -e 'Hello\nworld'
echo Hello$'\n'world
echo $'hello\nworld'
empreintes
hello
world
$''
chaînes utilisent Citations ANSI C :
Les mots de la forme
$'string'
sont traités spécialement. La Parole s'étend à chaîne, avec des caractères d'échappement avec barre oblique inversée remplacés comme spécifié par la norme ANSI C.
Vous pouvez toujours faire echo ""
.
par exemple.
echo "Hello"
echo ""
echo "World"
Au cas où quelqu'un se retrouverait en train de frapper sa tête contre le mur en essayant de comprendre pourquoi le script d'un collègue n'imprimait pas de nouvelles lignes, faites attention à cela ->
#!/bin/bash
function GET_RECORDS()
{
echo -e "starting\n the process";
}
echo $(GET_RECORDS);
Comme dans ce qui précède, le déroulement réel de la méthode peut lui-même être encapsulé dans un écho qui remplace tout écho pouvant figurer dans la méthode elle-même. Évidemment, je l'ai éclaircie par souci de concision, ce n'était pas si facile à repérer!
Vous pouvez ensuite informer vos camarades qu’une meilleure façon d’exécuter des fonctions serait la suivante:
#!/bin/bash
function GET_RECORDS()
{
echo -e "starting\n the process";
}
GET_RECORDS;
Essayer
echo -e "hello\nworld"
hello
world
travaillé pour moi dans nano editor.
Cela fonctionne pour moi à Raspbian,
echo -e "hello\\nworld"
POSIX 7 sur echo
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html
-e
n'est pas défini et les barres obliques inverses sont définies par l'implémentation:
Si le premier opérande est -n ou si l'un des opérandes contient un caractère <barre oblique inverse>, les résultats sont définis par l'implémentation.
sauf si vous avez une extension XSI en option.
Je vous recommande donc d’utiliser plutôt printf
, ce qui est bien spécifié:
l'opérande de format doit être utilisé comme chaîne de format décrite dans la notation de format de fichier XBD [...]
le notation de format de fichier :
\ n <nouvelle ligne> Déplace la position d’impression au début de la ligne suivante.
N'oubliez pas non plus qu'Ubuntu 15.10 et la plupart des distributions implémentent echo
en tant que:
help echo
which echo
ce qui peut entraîner une certaine confusion.
str='hello\nworld'
$ echo | sed "i$str"
hello
world
Cela fonctionne pour moi dans CentOS:
echo -e ""hello\nworld""
Vous pouvez aussi faire:
echo "hello
world"
Cela fonctionne à la fois dans un script et à partir de la ligne de commande.
Dans la ligne de commande, appuyez sur Shift+Enter faire les sauts de ligne à l'intérieur de la chaîne.
Cela fonctionne pour moi sur mon macOS et mon Ubuntu 18.04
Tapez simplement
echo
pour obtenir une nouvelle ligne
Une entrée de plus ici pour ceux qui ne l'ont pas fait fonctionner avec l'une de ces solutions et qui doivent obtenir une valeur de retour de leur fonction:
function foo()
{
local v="Dimi";
local s="";
.....
s+="Some message here $v $1\n"
.....
echo $s
}
r=$(foo "my message");
echo -e $r;
Seule cette astuce a fonctionné sur un Linux sur lequel je travaillais avec cette bash:
GNU bash, version 2.2.25(1)-release (x86_64-redhat-linux-gnu)
J'espère que ça 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 script bash, je devenais en colère comme vous jusqu'à ce que je viens d'essayer:
echo "WARNING : $warningsFound WARNINGS FOUND:
$warningStrings"
Appuyez simplement sur Entrée à l'endroit où vous souhaitez insérer ce saut. La sortie est maintenant:
WARNING : 2 WARNINGS FOUND:
Warning, found the following local orphaned signature file:
Cela pourrait être mieux fait comme
x="\n"
echo -ne $x
L'option -e interprétera les antislahs pour la séquence d'échappement
L'option - n supprimera le retour à la ligne final dans la sortie
PS: la commande echo a pour effet d'inclure toujours un retour à la ligne dans la sortie, donc -n est nécessaire pour la désactiver (et la rendre moins déroutante).
Il y a un nouveau expansion du paramètre ajouté dans _bash 4.4
_ qui interprète les séquences d'échappement:
${parameter@operator} - E operator
Le développement est une chaîne qui correspond à la valeur du paramètre avec les séquences d'échappement de la barre oblique inverse développées comme avec le mécanisme de citation _
$'…'
_.
_$ foo='hello\nworld'
$ echo "${foo@E}"
hello
world
_
Vous pouvez également utiliser echo avec des accolades,
$ (echo hello; echo world)
hello
world
Dans les cas, vous devez faire écho au long contenu (tel que le code) avec une concatination env var et vous avez voulu le simplifier.
echo -e
, printf
pourrait avoir certaines limitations
Vous pouvez utiliser des caractères spéciaux comme espace réservé pour les sauts de ligne (tels que ~
)
et essayez ceci:
echo ${content} | tr '~' '\n' > $targetFile
il doit invoquer un autre programme (tr
) qui devrait convenir à l’OMI.
Parfois, vous pouvez passer plusieurs chaînes séparées par un espace et il sera interprété comme \n
.
Par exemple, lorsque vous utilisez un script Shell pour les notifications multi-lignes:
#!/bin/bash
notify-send 'notification success' 'another line' 'time now '`date +"%s"`
Si vous écrivez des scripts et que vous répétez plusieurs fois les nouvelles lignes dans d'autres messages, une solution multiplate-forme de Nice consiste à insérer une nouvelle ligne littérale dans une variable comme celle-ci:
newline='
'
echo "first line$newlinesecond line"
echo "Error: example error message n${newline}${usage}" >&2 #requires usage to be defined
Je devais entourer le texte de guillemets tout en utilisant comme alias le profil bash (MacOx, iTerm).
alias helloworld="echo -e \"hello \n world\""