Frage Echo Newline in Bash druckt literal \ n


In Bash habe ich Folgendes versucht:

echo -e "hello\nworld"

Es wird jedoch nur ein Zeilenumbruch gedruckt \n. Wie kann ich den Zeilenumbruch drucken?

Ich benutze Ubuntu 11.04.


1567
2017-12-11 21:01


Ursprung


Antworten:


Du könntest benutzen printf stattdessen:

printf "hello\nworld\n"

printf hat ein konsistenteres Verhalten als echo. Das Verhalten von echo variiert stark zwischen den verschiedenen Versionen.


1934
2017-12-11 21:04



Sind Sie sicher, dass Sie in der Bash sind? Funktioniert für mich, alle drei Möglichkeiten:

echo -e "Hello\nworld"
echo -e 'Hello\nworld'
echo Hello$'\n'world

1296
2017-12-11 21:04



echo $'hello\nworld'

Drucke

hello
world

$'' Zeichenfolgen verwenden ANSI C Zitieren:

Worte der Form $'Zeichenfolge' werden speziell behandelt. Das Wort erweitert sich zu Zeichenfolge, mit Backslash-Escape-Zeichen ersetzt durch den ANSI C-Standard.


422
2017-11-02 09:39



Das könntest du immer tun echo "".

z.B.

echo "Hello"
echo ""
echo "World"

90
2018-02-28 22:14



Wenn jemand zufällig seinen Kopf gegen die Wand schlägt und versucht herauszufinden, warum ein Mitarbeiter-Skript keine Zeilenumbrüche drucken soll, dann achten Sie darauf ->

#!/bin/bash
function GET_RECORDS()
{
   echo -e "starting\n the process";
}

echo $(GET_RECORDS);

Wie oben kann der eigentliche Ablauf des Verfahrens selbst in ein Echo eingebettet sein, das alle Echos ersetzt, die in dem Verfahren selbst vorhanden sein können. Offensichtlich habe ich es der Kürze wegen verwässert, es war nicht so einfach zu erkennen!

Sie können dann Ihren Kameraden mitteilen, dass ein besserer Weg zur Ausführung von Funktionen wie folgt aussehen würde:

#!/bin/bash
function GET_RECORDS()
{
   echo -e "starting\n the process";
}

GET_RECORDS;

32
2017-08-08 20:15



Versuchen

echo -e "hello\nworld"
hello
world

arbeitete für mich im Nano-Editor.


20
2017-12-05 11:06



Das funktioniert bei mir in raspbian,

echo -e "hello\\nworld"


17
2018-04-19 19:05



str='hello\nworld'
$ echo | sed "i$str"
hello
world

14
2017-11-23 11:10



POSIX 7 auf Echo

http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html

-e ist nicht definiert und Backslashes sind implementiert:

Wenn der erste Operand -n ist oder einer der Operanden ein <Backslash> -Zeichen enthält, sind die Ergebnisse implementierungsdefiniert.

es sei denn, Sie haben eine optionale XSI-Erweiterung.

Also benutze es printf stattdessen:

Format Operand soll als Formatzeichenfolge verwendet werden, die in XBD File Format Notation beschrieben wird [...]

das Dateiformatnotation:

\ n <newline> Verschieben Sie die Druckposition an den Anfang der nächsten Zeile.

Bedenken Sie auch, dass Ubuntu 15.10 und die meisten Distributionen implementieren echo beide als:

  • ein Bash eingebaut: help echo
  • eine eigenständige ausführbare Datei: which echo

was zu etwas Verwirrung führen kann.


14
2018-01-22 13:23



Ein weiterer Eintrag hier für diejenigen, die es nicht mit einer dieser Lösungen arbeiten ließen, und müssen einen Rückgabewert von ihrer Funktion erhalten:

function foo()
{
    local v="Dimi";
    local s="";
    .....
    s+="Some message here $v $1\n"
    .....
    echo $s
}

r=$(foo "my message");
echo -e $r;

Nur dieser Trick funktionierte in einem Linux, an dem ich mit dieser Bash arbeitete:

GNU bash, version 2.2.25(1)-release (x86_64-redhat-linux-gnu)

Hoffe es hilft jemandem mit ähnlichen Problemen.


4
2018-01-31 14:20



Mein Skript:

echo "WARNINGS: $warningsFound WARNINGS FOUND:\n$warningStrings

Ausgabe:

WARNING : 2 WARNINGS FOUND:\nWarning, found the following local orphaned signature file:

Auf meinem Bash-Skript wurde ich so wütend wie du, bis ich es gerade versucht habe:

echo "WARNING : $warningsFound WARNINGS FOUND:
$warningStrings"

Drücken Sie einfach Enter, wo Sie den Sprung einfügen möchten. Ausgabe ist jetzt:

WARNING : 2 WARNINGS FOUND:
Warning, found the following local orphaned signature file:

3
2018-05-14 08:58