Ich habe ein Problem mit echo
in meinem Skript:
echo -n "Some string..."
druckt
-n Some string...
und geht zur nächsten Zeile. In der Konsole funktioniert es ohne Zeilenumbruch korrekt:
Some string...
shell
command-line
sh
qwertz
quelle
quelle
bash
im Bourne-Shell-Modus laufe , funktioniert es hier einwandfrei. Es ist auch etwas unwahrscheinlich, dass Sie wirklich eine Bourne-Shell als interaktive Shell verwenden, oder?echo -ne "text without new line: "; echo "some text";
Antworten:
Es gibt mehrere Versionen des
echo
Befehls mit unterschiedlichen Verhaltensweisen. Anscheinend verwendet die für Ihr Skript verwendete Shell eine Version, die nicht erkannt wird-n
.Der
printf
Befehl hat ein viel konsistenteres Verhalten.echo
ist in Ordnung für einfache Dinge wieecho hello
, aber ich schlage vor,printf
für etwas komplizierteres zu verwenden.Auf welchem System befinden Sie sich und welche Shell verwendet Ihr Skript?
quelle
#!/bin/bash
hat funktioniert. Normalerweise arbeite ich mit Bash.printf
Befehls.echo
fügt immer neue Zeilen hinzu ... Die Problemumgehung ist bestenfalls ruckelig.%
ist Ihre Shell-Eingabeaufforderung. Versuchen Sie dies und beobachten Sie genau:printf hello; sleep 5
bash
hat einen "eingebauten" Befehl namens "echo":Zusätzlich gibt es einen "Echo" -Befehl, der eine ordnungsgemäße ausführbare Datei ist (dh die Shell gabelt und führt aus, anstatt sie
/bin/echo
zu interpretierenecho
und auszuführen):Das Verhalten von
echo
WRT zu\c
und-n
variiert. Ihre beste Wahl ist die Verwendungprintf
, die für vier verschiedene * NIX-Geschmacksrichtungen verfügbar ist , die ich mir angesehen habe:quelle
Versuche es mit
Es funktioniert für mich wie erwartet (wie ich aus Ihrer Frage verstanden habe).
Beachten Sie, dass ich diese Informationen von der
man
Seite erhalten habe. Auf derman
Seite wird auch darauf hingewiesen, dass die Shell möglicherweise eine eigene Version von hatecho
, und ich bin nicht sicher, obbash
sie eine eigene Version hat.quelle
echo "some string...\c"
stattdessen nur sagen möchten . Wenn Sie jedoch mehrere Bash-Varianten mit stark unterschiedlichen Echo-Befehlen unterstützen müssen, ist es wahrscheinlich besser, printf zu verwenden, oder Sie müssen die Funktionen der Echo-Befehle mit so etwas überprüfen[ -n "$( echo -e )" ] && echo "sh stuff\c" || echo -e "bash stuff\c"
(zumindest Bash unterstützt auch \ c, sodass Sie die nicht verwenden müssen -n Option, aber Sie brauchen das -e für Bash)Um dies zu erreichen, gibt es grundsätzlich zwei Methoden, die ich häufig verwende:
1. Verwenden Sie das Cursor- Escape-Zeichen (
\c
) mitecho -e
Beispiel :
-e
Das Flag aktiviert die E- Scape-Zeichen in der Zeichenfolge.\c
bringt den C ursor zurück in die aktuelle Zeile.ODER
2. Verwenden Sie den
printf
BefehlBeispiel :
quelle
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.
quelle
Nur für das beliebteste Linux
Ubuntu
& es istbash
:Überprüfen Sie, welche Shell Sie verwenden? Meistens funktioniert unten, sonst sehen Sie das :
echo $0
Wenn oben gedruckt
bash
wird, funktioniert unten:printf "hello with no new line printed at end"
ODER
echo -n "hello with no new line printed at end"
quelle
Ich glaube im Moment, dass Ihre Ausgabe wie folgt gedruckt wird
Sie können verwenden
xargs
, um mehrzeilige Standardausgabe in dieselbe Zeile zu bringen.quelle
Wenn Sie Ihr 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 nicht. ex echo "Dies ist die erste \ n Zeile" wird gedruckt. Dies ist die erste \ n Zeile.
quelle
quelle