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...
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...
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?
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"
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.
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
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.