it-swarm.com.de

'echo' ohne Zeilenumbruch in einem Shell-Skript

Ich habe ein Problem mit echo in meinem Skript:

echo -n "Some string..."

druckt

-n Some string...

und wechselt zur nächsten Zeile. In der Konsole funktioniert es einwandfrei ohne Zeilenumbruch:

Some string...
461
qwertz

Es gibt mehrere Versionen des Befehls echo mit unterschiedlichem Verhalten. Anscheinend verwendet die für Ihr Skript verwendete Shell eine Version, die -n nicht erkennt.

Der Befehl printf weist ein wesentlich konsistenteres Verhalten auf. echo ist in Ordnung für einfache Dinge wie echo hello, aber ich schlage vor, printf für etwas Komplizierteres zu verwenden.

Auf welchem ​​System arbeiten Sie und welche Shell verwendet Ihr Skript?

488
Keith Thompson

bash hat einen "eingebauten" Befehl namens "echo":

$ type echo
echo is a Shell builtin

Zusätzlich gibt es einen "echo" -Befehl, der eine ordnungsgemäße ausführbare Datei ist (das heißt, die Shell gibt /bin/echo aus und führt echo aus, anstatt ihn zu interpretieren und auszuführen):

$ ls -l /bin/echo
-rwxr-xr-x 1 root root 22856 Jul 21  2011 /bin/echo

Das Verhalten der WRT von echo zu \c und -n ist unterschiedlich. Am besten verwenden Sie printf, das in vier verschiedenen * NIX-Versionen verfügbar ist, die ich mir angesehen habe:

$ printf "a line without trailing linefeed"
$ printf "a line with trailing linefeed\n"
125
aqn

Versuche es mit

echo -e "Some string...\c"

Es funktioniert bei mir wie erwartet (wie ich aus Ihrer Frage verstanden habe).

Beachten Sie, dass ich diese Informationen von der Seite man erhalten habe. Auf der Seite man wird außerdem darauf hingewiesen, dass die Shell möglicherweise eine eigene Version von echo hat, und ich bin nicht sicher, ob bash eine eigene Version hat.

83
Sonny

Wenn Sie Echo in einem if mit anderen Befehlen wie "read" verwenden, wird die Einstellung möglicherweise ignoriert und es wird trotzdem zu einer neuen Zeile gesprungen.

2

Wenn Sie ein Shell-Skript schreiben, setzen Sie die erste Zeile immer als #!/Usr/bin/env bash. Diese Shell lässt keine Escape-Sequenzen aus oder manipuliert sie. ex echo "Dies ist die\n erste Zeile" wird gedruckt Dies ist die\n erste Zeile.

0
Amit Singh

Nur für das beliebteste LinuxUbuntu & es ist bash:

  1. Überprüfen Sie, welche Shell Sie verwenden? Meistens funktioniert unten, sonst siehe dies :

    echo $0

  2. Wenn oben bash gedruckt wird, funktioniert unten:

    printf "hello with no new line printed at end"
    ODER
    echo -n "hello with no new line printed at end"