ubuntuusers.de

echo macht kein \n

Status: Gelöst | Ubuntu-Version: Ubuntu 9.10 (Karmic Koala)
Antworten |

Unix_Samurai

Anmeldungsdatum:
10. Oktober 2008

Beiträge: 661

Hi.

echo test\ntest

ergibt bei mir

testntest

Wo liegt der Fehler?

MfG

Andy123

Anmeldungsdatum:
23. September 2009

Beiträge: 297

echo test'\n'test

Unix_Samurai

(Themenstarter)

Anmeldungsdatum:
10. Oktober 2008

Beiträge: 661

Danke. Aber Problem ist noch nicht gelöst.

echo test'\n'test

ergibt

test'\n'test

Ich wünsche mir aber

test
test

Andy123

Anmeldungsdatum:
23. September 2009

Beiträge: 297

wtf? bei mir ergibt

echo test'\n'test
test
test

linrunner

Avatar von linrunner

Anmeldungsdatum:
7. August 2007

Beiträge: 3272

Hi!

echo -e test'\n'test

tut es.

ps. gefunden mit man echo ... 😀

Unix_Samurai

(Themenstarter)

Anmeldungsdatum:
10. Oktober 2008

Beiträge: 661

Danke. Das -e flag hat mich gerettet. Merkwürdig, dass es bei Dir so ging Andy.

Hello_World

Anmeldungsdatum:
13. Juni 2006

Beiträge: 3620

Du kannst übrigens auch Newlines direkt in den String hineinschreiben.

1
2
echo 'foo
bar'

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

Was im Gegensatz zu "\n" auch portabel, also POSIX-kompatibel ist.

diesch Team-Icon

Avatar von diesch

Anmeldungsdatum:
18. Februar 2009

Beiträge: 5072

Wohnort: Brandenburg an der Havel

linrunner schrieb:

ps. gefunden mit man echo ... 😀

man echo bezieht sich auf echo aus den GNU coreutils, d.h. /bin/echo Die meisten Shell haben aber auch ein eingebautes echo, das verwendet wird, wenn du echo ohne Pfad aufrufst.

Das Verhalten von GNU echo mit -e verletzt die POSIX-Spezifikationen, es ist daher eine gute Idee, sich gar nicht erst daran zu gewöhnen. Wenn man Sequenzen wie \n verwenden will, benutzt man am besten printf statt echo.

linrunner

Avatar von linrunner

Anmeldungsdatum:
7. August 2007

Beiträge: 3272

Ah, wieder was gelernt. Es ist übrigens die bash mit der es ohne -e nicht funktioniert (und deren internes echo lt. man bash -e erfordert und unterstützt):

#!/bin/bash
echo "abcd\nefgh"

liefert

abcd\nefgh

Die imho POSIX-kompatible dash macht es richtig:

#!/bin/sh
echo "abcd\nefgh"

liefert

abcd
efgh

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

@linrunner: Es gibt hier kein „richtig“, beide Shells verhalten sich POSIX-kompatibel, denn:

[…] If the first operand is -n, or if any of the operands contain a <backslash> character, the results are implementation-defined. [1]

Die Shell darf in diesem Fall machen, was sie will, sie könnte sogar das Dateisystem löschen und wäre dennoch POSIX-kompatibel. Auf implementierungsabhängiges Verhalten sollte man sich folglich nicht verlassen (das empfiehlt sogar der POSIX-Standard selbst).

Deswegen ja auch mein vorheriger Beitrag.

[1] IEEE Std 1003.1-2008, Shell & Utilities, 4. Utilities, echo

Antworten |