Ich versuche -nmit dem echoBefehl zu drucken . Aber wenn ich einfach echo -ntippe, wird nur eine neue Zeile ausgegeben, nicht angezeigt -n, stattdessen wird eine neue Zeile ausgegeben.
getopt(???) zum Parsen der Befehlszeile verwendet wird
Ich versuche -nmit dem echoBefehl zu drucken . Aber wenn ich einfach echo -ntippe, wird nur eine neue Zeile ausgegeben, nicht angezeigt -n, stattdessen wird eine neue Zeile ausgegeben.
getopt(???) zum Parsen der Befehlszeile verwendet wird
Antworten:
Das Problem ist, dass echodas -nals Argument interpretiert wird . In der Standard-Bash-Implementierung bedeutet dies (von help echo):
-n do not append a newline
Es gibt verschiedene Möglichkeiten, das zu umgehen:
Machen Sie es zu etwas, das keine Option ist, indem Sie einen anderen Charakter einfügen. Sagen Sie beispielsweise, dass echoeine neue Zeile nicht gedruckt werden soll, und weisen -nSie sie dann an, Backslash-Escapes mit zu interpretieren -eund die neue Zeile explizit hinzuzufügen.
$ echo -ne '-n\n'
-nAlternativ können Sie auch ein Leerzeichen einfügen
$ echo " -n"
-n
Das fügt jedoch einen Raum hinzu, den Sie wahrscheinlich nicht wollen.
Verwenden Sie ein nicht druckbares Zeichen davor. Hier. Ich benutze die Rücktaste ( \b)
$ echo -e "\b-n"
-n
Dies fügt auch ein zusätzliches Zeichen hinzu, das Sie wahrscheinlich nicht möchten.
Verwenden Sie Tricks
$ echo n- | rev
-n
Der revBefehl druckt die Ausgabe einfach umgekehrt.
Verwenden Sie das richtige Werkzeug für den Job
$ printf -- '-n\n'
-ngrep '^-n'. pritnfist der richtige Weg.
printfist sowieso besser, aber die Frage betrifft eben echo.
echo -e "-n\c"es genau das Richtige wäre.
\cWeitere Ausgabe unterdrücken
Manchmal ist es eine gute Idee, das richtige Werkzeug zu verwenden. Sie könnten printfstattdessen verwenden:
% printf "-n\n"
-n
echo, die printfaber besser standardisiert sind .
Sie können diesen Befehl verwenden, er fügt jedoch zusätzlichen Speicherplatz hinzu.
echo -e "\r-n"
Dies ist eine Art Hack.
-e Aktiviert Backslash-Befehlssymbole.
\r ist ein Wagenrücklauf.
Tatsächlich kann jedes \gültige Zeichen an einer beliebigen Stelle der Zeichenfolge verwendet werden.
Sie können sehen, welche gültig sind durch help echo.
echo "-n"funktioniert nicht, weil -nes als Parameter für verwendet wird echo.
PS Die beste Lösung ist meiner Meinung nach
echo -e "-n\c"
Es werden keine zusätzlichen Zeichen hinzugefügt .
echo -e "-n\n"
druckt das selbe aber mit einem neuen Zeilenzeichen.
-nist gültig, -nfoowird also nicht gedruckt.
man echohat es auch. Ist helpaber ein bisschen besser.
/bin/echoist eine völlig andere Sache und wenn Sie echoin Bash laufen , erhalten Sie die eingebaute, die je nach Ihrer Shell sehr unterschiedlich sein kann.
Ich denke, wenn Sie auf jeden Fall echonur verwenden möchten , sollte dies Sie zufriedenstellen:
echo "-n "
Dies funktioniert, weil while -neine gültige Option für echoist -nund ein Leerzeichen danach nicht. Da dies keine Option ist, echodrucken Sie es einfach aus.
Ihr überdenkt es wirklich.
echo -e \\055n
Oder ohne nachgestellte Newline
echo -en \\055n
printf "-n\n" ein Überdenken?
/bin/echozumindest , wenn aufgerufen , wieecho -e "\055n"
Um die Antwort von @ AB zu erweitern, besteht die einzige tragbare Möglichkeit darin echo, keine Optionen wie diese zu verwenden -n. Verwenden Sie printfstattdessen, sofern verfügbar. Diese Referenzseite bietet weitere Details und erklärt sehr gut, wann und wie echound printfsollte verwendet werden:
Heutzutage ist echo (1) nur noch portabel, wenn Sie Flags und Escape-Sequenzen weglassen. Verwenden Sie stattdessen printf (1), wenn Sie mehr als nur Text benötigen.
Im Bash-Skript können Sie Folgendes ausführen:
echo -n -
echo n
Oder in interaktiver Shell:
echo -n - ; echo n
Das ist echoein -Charakter und ein nCharakter.
-pilot6@Pilot6:~$. Die zweiten Ausgänge n.
&&- ich würde nicht wirklich sagen, dass diese Antwort falsch ist .
Du kannst rennen
printf -n;echo
Getestet in Busybox Ash
ashist der Name der Almquist Shell.
echo -n -- -n(es ist keine Linux-Box zum Testen verfügbar)?