638 Stimmen

"echo -n" gibt "-n" aus

Ich habe ein Problem mit echo in meinem Skript:

echo -n "Some string..."

druckt

-n Some string...

und springt in die nächste Zeile. In der Konsole funktioniert es korrekt ohne Zeilenumbruch:

Some string...

677voto

Keith Thompson Punkte 240701

Es gibt mehrere Versionen des echo Befehl, mit unterschiedlichen Verhaltensweisen. Offenbar verwendet die für Ihr Skript verwendete Shell eine Version, die den Befehl -n .

En printf Befehl hat ein viel konsistenteres Verhalten. echo ist gut für einfache Dinge wie echo hello aber ich empfehle die Verwendung von printf für alles, was komplizierter ist.

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

187voto

aqn Punkte 2496

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

$ type echo
echo is a shell builtin

Außerdem gibt es einen "echo"-Befehl, der eine echte ausführbare Datei ist (d.h. die Shell gabelt sich und führt aus /bin/echo im Gegensatz zum Dolmetschen echo und ihre Ausführung):

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

Das Verhalten von entweder echo in Bezug auf \c y -n variiert. Am besten ist es, Sie verwenden printf das auf vier verschiedenen *NIX-Varianten verfügbar ist, die ich mir angesehen habe:

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

104voto

Sonny Punkte 2043

Versuchen Sie es mit

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

Bei mir funktioniert es wie erwartet (so wie ich es in Ihrer Frage verstanden habe).

Diese Informationen habe ich aus der man Seite. Die man Seite weist auch darauf hin, dass die Shell ihre eigene Version von echo und ich bin nicht sicher, ob bash hat seine eigene Version.

13voto

Deepam Gupta Punkte 1684

Um dies zu erreichen, gibt es im Wesentlichen zwei Methoden, die ich häufig verwende:

1. Die Verwendung des Cursor Escape-Zeichen ( \c ) mit echo -e

Beispiel :

for i in {0..10..2}; do
  echo -e "$i \c"              
done
# 0 2 4 6 8 10
  • -e Flagge aktiviert die E Zeichen in der Zeichenkette.
  • \c bringt die C ursor zurück zur aktuellen Zeile.

オア

2. Die Verwendung des printf comando

Beispiel :

for ((i = 0; i < 5; ++i)); do
  printf "$i "
done
# 0 1 2 3 4

3voto

Alexandre Strube Punkte 103

Wenn Sie echo innerhalb einer wenn Bei anderen Befehlen, wie z. B. "Lesen", wird die Einstellung möglicherweise ignoriert und es wird trotzdem eine neue Zeile eingefügt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X