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.

1663
demandé sur Mateusz Piotrowski 2011-12-12 01:01:54

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.

2042
répondu sth 2015-05-20 14:46:18

ê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
1339
répondu choroba 2014-08-14 21:38:01
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.

435
répondu Vanuan 2015-03-12 15:19:47

vous pouvez toujours faire echo "" .

p.ex.

echo "Hello"
echo ""
echo "World"
96
répondu Nayeem Zen 2016-06-07 11:12:13

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;
34
répondu Uncle Iroh 2013-08-08 20:15:15

Essayer

echo -e "hello\nworld"
hello
world

a travaillé pour moi dans nano editor.

22
répondu Harsha B 2017-12-05 11:06:59

Cela fonctionne pour moi dans raspbian,

echo -e "hello\nworld"

18
répondu Sathesh 2014-04-19 19:05:14
str='hello\nworld'
$ echo | sed "i$str"
hello
world
14
répondu alinsoar 2012-11-23 11:10:37

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 format

doit ê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.

14

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.

4
répondu DNT 2014-01-31 14:20:48

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:
3
répondu TanisDLJ 2014-05-14 08:58:12

vous pouvez aussi utiliser echo avec des attelles,

$ (echo hello; echo world)
hello
world
2
répondu Avinash Raj 2014-05-05 09:32:48

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)

2
répondu Dhwanit 2017-05-30 07:06:02

vous pouvez aussi faire:

echo "hello
world"

ça marche pour moi sur mes macOS.

1
répondu vinzee 2018-08-31 16:45:37

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"`
0
répondu Hunter Frazier 2018-05-26 07:37:43

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
0
répondu PesaThe 2018-07-23 20:25:04

il travaille pour moi à CentOS:

echo -e ""hello\nworld""
0
répondu vanishedzhou 2018-09-27 08:48:33