Dans Bash, essayez ceci:
echo -e "hello\nworld"
Mais il n'imprime pas une nouvelle ligne, seulement \n
. Comment puis-je faire imprimer la nouvelle ligne?
J'utilise Ubuntu 11.04.
Dans Bash, essayez ceci:
echo -e "hello\nworld"
Mais il n'imprime pas une nouvelle ligne, seulement \n
. Comment puis-je faire imprimer la nouvelle ligne?
J'utilise Ubuntu 11.04.
Réponses:
Vous pouvez utiliser à la printf
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.
printf %"s\n" hello world
- printf réutilisera le format si trop d'arguments sont fournis
echo
soutenez l' -e
option.
echo
, -e
est simplement imprimé dans la sortie elle-même, donc je pense que cette réponse est parfaitement valide car elle echo
n'est pas cohérente ici (sauf si nous parlons d'une version spécifique).
Êtes-vous sûr d'être en bash? Fonctionne pour moi, dans les quatre sens:
echo -e "Hello\nworld"
echo -e 'Hello\nworld'
echo Hello$'\n'world
echo Hello ; echo world
-e
param n'existe pas sur tous les systèmes d'exploitation * nix
echo $'hello\nworld'
impressions
hello
world
$''
les chaînes utilisent la citation ANSI C :
Les mots du formulaire sont traités spécialement. Le mot se développe en chaîne , avec des caractères d'échappement antislash remplacés comme spécifié par la norme C ANSI.
$'string'
Tu pourrais toujours faire echo ""
.
par exemple
echo "Hello"
echo ""
echo "World"
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. À votre santé.
echo -en "\n"
.
echo
suffit pour obtenir une ligne vide
Essayer
echo -e "hello\nworld"
hello
world
travaillé pour moi dans l' nano
éditeur.
Depuis la page de manuel:
-e
permettre l'interprétation des échappements antislash
Dans le cas où quelqu'un se retrouverait à se battre la tête contre le mur en essayant de comprendre pourquoi le script d'un collègue n'imprimerait 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 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 être bref, ce n'était pas si facile à repérer!
Vous pouvez alors 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;
POSIX 7 sur l'écho
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 <backslash>, les résultats sont définis par l'implémentation.
sauf si vous disposez d'une extension XSI en option.
Je recommande donc d'utiliser à la printf
place, ce qui est bien spécifié:
l'opérande format doit être utilisé comme la chaîne de format décrite dans la notation de format de fichier XBD [...]
la notation du format de fichier :
\ n <nouvelle ligne> Déplace la position d'impression au début de la ligne suivante.
Gardez également à l'esprit que Ubuntu 15.10 et la plupart des distributions implémentent les echo
deux comme:
help echo
which echo
ce qui peut entraîner une certaine confusion.
Tapez simplement
echo
pour obtenir une nouvelle ligne
str='hello\nworld'
$ echo | sed "i$str"
hello
world
Cela fonctionne pour moi dans CentOS:
echo -e ""hello\nworld""
Vous pouvez également faire:
echo "hello
world"
Cela fonctionne à la fois à l'intérieur d'un script et à partir de la ligne de commande.
Sur la ligne de commande, appuyez sur Shift+Enter pour effectuer les sauts de ligne à l'intérieur de la chaîne.
Cela fonctionne pour moi sur mon macOS et mon Ubuntu 18.04
Une autre entrée 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é dans un linux sur lequel je travaillais avec ce bash:
GNU bash, version 2.2.25(1)-release (x86_64-redhat-linux-gnu)
J'espère que cela aide quelqu'un avec un problème similaire.
Mon script:
echo "WARNINGS: $warningsFound WARNINGS FOUND:\n$warningStrings
Production:
WARNING : 2 WARNINGS FOUND:\nWarning, found the following local orphaned signature file:
Sur mon script bash, je devenais fou comme vous jusqu'à ce que je viens d'essayer:
echo "WARNING : $warningsFound WARNINGS FOUND:
$warningStrings"
Appuyez simplement sur Entrée où vous souhaitez insérer ce saut. La sortie est maintenant:
WARNING : 2 WARNINGS FOUND:
Warning, found the following local orphaned signature file:
Vous pouvez également utiliser l'écho avec des accolades,
$ (echo hello; echo world)
hello
world
echo hello; echo world
Cela pourrait être mieux fait
x="\n"
echo -ne $x
L'option -e interprétera les backslahes pour la séquence d'échappement. L'
option -n supprimera la nouvelle ligne de fin dans la sortie.
PS: la commande echo a pour effet d'inclure toujours une nouvelle ligne de fin dans la sortie, donc -n est requis pour désactiver cette chose (et la rendre moins confuse)
Il y a une nouvelle extension de paramètre ajoutée 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 des séquences d'échappement antislash développées comme avec le
$'…'
mécanisme de citation.
$ foo='hello\nworld'
$ echo "${foo@E}"
hello
world
Si vous écrivez des scripts et que vous répéterez plusieurs fois des sauts de ligne dans d'autres messages, une bonne solution multiplateforme consiste à mettre un saut de ligne littéral dans une variable comme ceci:
newline='
'
echo "first line$newlinesecond line"
echo "Error: example error message n${newline}${usage}" >&2 #requires usage to be defined
Parfois, vous pouvez passer plusieurs chaînes séparées par un espace et cela sera interprété comme \n
.
Par exemple, lors de l'utilisation d'un script shell pour les notifications multi-lignes:
#!/bin/bash
notify-send 'notification success' 'another line' 'time now '`date +"%s"`
\n
. Il est interprété comme un argument distinct du programme, et le programme lui-même peut afficher cet argument sur une nouvelle ligne, mais cela ne signifie pas qu'il a été converti en \n
à tout moment et dépend entièrement du programme.
Cela m'a amené là ....
outstuff=RESOURCE_GROUP=[$RESOURCE_GROUP]\\nAKS_CLUSTER_NAME=[$AKS_CLUSTER_NAME]\\nREGION_NAME=[$REGION_NAME]\\nVERSION=[$VERSION]\\nSUBNET-ID=[$SUBNET_ID]
printf $outstuff
Rendements:
RESOURCE_GROUP=[akswork-rg]
AKS_CLUSTER_NAME=[aksworkshop-804]
REGION_NAME=[eastus]
VERSION=[1.16.7]
SUBNET-ID=[/subscriptions/{subidhere}/resourceGroups/makeakswork-rg/providers/Microsoft.Network/virtualNetworks/aks-vnet/subnets/aks-subnet]
Solution supplémentaire:
Dans les cas, vous devez faire écho à plusieurs lignes du contenu long (comme le code / les configurations)
Par exemple :
echo -e
,
printf
pourrait avoir une limitation
Vous pouvez utiliser un caractère spécial comme espace réservé comme saut de ligne (tel que ~
) et le remplacer après la création du fichier à l'aide detr
echo ${content} | tr '~' '\n' > $targetFile
il doit invoquer un autre programme ( tr
) qui devrait convenir à l'OMI.