Wie drucke ich ein neues Zeilenzeichen mit Echo?

15

Ich lege eine Zeichenfolge mit hexdumpso 2031 3334 2e30 0a32 2032 3331 302e 000a. Es ist klar, dass 0x0aes sich um ein Zeichen für eine neue Zeile handelt. Wenn ich jedoch versuche, diese Zeichenfolge auszugeben, erhalte ich immer 1 430.2 2 13.0- die neue Zeile wird durch ein Leerzeichen ersetzt, auch wenn ich das -eFlag verwende.

Woran kann das liegen? Ruiniert das Tailing \0den Output? Gibt es Alternativen zum Drucken 0x0aeiner neuen Zeile?

Danke und viele Grüße.

Sommer_Mehr_Mehr_Tee
quelle
wenn ich versuche, diese Saite wiederzugeben Wie genau machst du das? Was ist der genaue Befehl, den Sie verwenden?
Dennis
@ Tennis meine ich echo -e. Danke, ich finde eine Lösung.
Summer_More_More_Tea
1
Die bevorzugte Lösung ist nur zu verwenden, printf "...\n"anstatt echo.
Michael

Antworten:

26

Das neue Zeilenzeichen mit dem echoBefehl ist "\ n". Das folgende Beispiel nehmen:

echo -e "This is line 1\nThis is line 2"

Würde zur Ausgabe führen

This is line 1
This is line 2

Der Parameter "-e" ist hier wichtig.

Izzy
quelle
3
Übrigens hängt dies davon ab, dass "echo -e ..."das Echo von bash korrekt funktioniert (z. B. dashwird nur das "-e" ausgegeben ). Aber '/ bin / echo' kann (oder kann nicht) auch funktionieren. Leider (vielleicht passend) gibt es eine Menge Echos und Sie möchten sich nicht wirklich darum kümmern, welches Sie bekommen werden. Die Verwendung 'printf "....\n"ist eine portablere Option für alle Envs und Shells.
Michael
@michael_n das ist es, was das OP letztendlich auch wieder rückgängig gemacht hat. Aber die Frage lautete ausdrücklich "mit Echo" - daher meine Antwort auf diese Weise. Wie auch immer, es war nicht "mit Bash" - also danke, dass Sie auf diese Unterschiede hingewiesen haben!
Izzy
4

POSIX 7 sagt, dass Sie nicht können

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

-e ist nicht definiert und Backslashes sind implementiert:

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

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

Also benutze printfstattdessen:

Der Formatoperand wird als Formatzeichenfolge verwendet, die in der XBD-Dateiformatnotation [...] beschrieben ist.

die Dateiformatnotation :

\ n <neue Zeile> Verschiebt die Druckposition an den Anfang der nächsten Zeile.

Beachten Sie auch, dass Ubuntu 15.10 und die meisten Distributionen echobeides implementieren :

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

was zu Verwirrung führen kann.

Ciro Santilli ist ein Schauspieler
quelle
2

Ich formatiere diese Zeichenkette endlich richtig mit printf "$string". Danke euch allen.

Sommer_Mehr_Mehr_Tee
quelle
Worüber $stringsprichst du? Wie hängt das mit der Frage zusammen? Worum geht es nicht \nwie bei den beiden anderen Antworten?
Peter Mortensen