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.
Funktioniert es echo -n -- -n(es ist keine Linux-Box zum Testen verfügbar)?
23.
Ich installiere Ubuntu in einer virtuellen Maschine und es scheint sehr langsam zu sein, warte.
Star OS
1
Ich habe nachgesehen - tut es nicht. Wahrscheinlich, weil es sich um einen internen Bash-Befehl handelt und nicht getopt(???) zum Parsen der Befehlszeile verwendet wird
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'-n
Alternativ 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.
Sie haben Recht, dass jedes gültige Zeichen ausreicht.
Pilot6
@Pilot6 ja, aber das Problem bei diesem Ansatz (deiner und meiner) ist, dass er einen zusätzlichen Charakter hinzufügt. Das kann Probleme auf der ganzen Linie verursachen. Vor allem, wenn Sie es dann analysieren und versuchen möchten, etwas wie grep '^-n'. pritnfist der richtige Weg.
Terdon
Naja, printfist sowieso besser, aber die Frage betrifft eben echo.
Pilot6
2
Es sieht so aus, als ob echo -e "-n\c"es genau das Richtige wäre.
Pilot6
1
\cWeitere Ausgabe unterdrücken
Pilot6
15
Manchmal ist es eine gute Idee, das richtige Werkzeug zu verwenden. Sie könnten printfstattdessen verwenden:
Wov! Das ist besser als meins; kannst du etwas für "Anfänger" erklären ;-)
Sadi
Danke, mir ist auch aufgefallen, dass es egal ist, wo Sie den Wagenrücklauf am Anfang oder am Ende einfügen.
Sadi
@Sadi Ja, das liegt daran, dass das Hinzufügen einer Option zu einer ungültigen Option führt. -nist gültig, -nfoowird also nicht gedruckt.
Terdon
@terdon man echohat es auch. Ist helpaber ein bisschen besser.
Pilot6
Ich weiß, es hat es, es ist einfach nicht relevant. /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.
Terdon
5
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.
Ja, ich habe nur so geantwortet. Löscht meine Antwort. Dies ist relativ tragbar, dass es funktioniert mit integrierte Echo und /bin/echozumindest , wenn aufgerufen , wieecho -e "\055n"
abligh
-en ist nicht was ich will.
Star OS
2
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.
Erste Befehlsausgaben -pilot6@Pilot6:~$. Die zweiten Ausgänge n.
Pilot6
@ Pilot6 Hängt davon ab, ob Sie es in einem interaktiven Terminal oder in einem Bash-Skript ausführen, das in der Frage nicht angegeben ist. OTOH, wenn Sie es im Terminal brauchen, ist es einfach, die beiden Zeilen mit zu kombinieren &&- ich würde nicht wirklich sagen, dass diese Antwort falsch ist .
user12205
Ich bearbeite es, damit es für ein Bash-Skript viel klarer wird.
echo -n -- -n
(es ist keine Linux-Box zum Testen verfügbar)?getopt
(???) zum Parsen der Befehlszeile verwendet wirdAntworten:
Das Problem ist, dass
echo
das-n
als Argument interpretiert wird . In der Standard-Bash-Implementierung bedeutet dies (vonhelp echo
):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
echo
eine neue Zeile nicht gedruckt werden soll, und weisen-n
Sie sie dann an, Backslash-Escapes mit zu interpretieren-e
und die neue Zeile explizit hinzuzufügen.Alternativ können Sie auch ein Leerzeichen einfügen
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
)Dies fügt auch ein zusätzliches Zeichen hinzu, das Sie wahrscheinlich nicht möchten.
Verwenden Sie Tricks
Der
rev
Befehl druckt die Ausgabe einfach umgekehrt.Verwenden Sie das richtige Werkzeug für den Job
quelle
grep '^-n'
.pritnf
ist der richtige Weg.printf
ist sowieso besser, aber die Frage betrifft ebenecho
.echo -e "-n\c"
es genau das Richtige wäre.\c
Weitere Ausgabe unterdrückenManchmal ist es eine gute Idee, das richtige Werkzeug zu verwenden. Sie könnten
printf
stattdessen verwenden:quelle
echo
, dieprintf
aber besser standardisiert sind .Sie können diesen Befehl verwenden, er fügt jedoch zusätzlichen Speicherplatz hinzu.
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-n
es als Parameter für verwendet wirdecho
.PS Die beste Lösung ist meiner Meinung nach
Es werden keine zusätzlichen Zeichen hinzugefügt .
druckt das selbe aber mit einem neuen Zeilenzeichen.
quelle
-n
ist gültig,-nfoo
wird also nicht gedruckt.man echo
hat es auch. Isthelp
aber ein bisschen besser./bin/echo
ist eine völlig andere Sache und wenn Sieecho
in Bash laufen , erhalten Sie die eingebaute, die je nach Ihrer Shell sehr unterschiedlich sein kann.Ich denke, wenn Sie auf jeden Fall
echo
nur verwenden möchten , sollte dies Sie zufriedenstellen:Dies funktioniert, weil while
-n
eine gültige Option fürecho
ist-n
und ein Leerzeichen danach nicht. Da dies keine Option ist,echo
drucken Sie es einfach aus.quelle
Ihr überdenkt es wirklich.
Oder ohne nachgestellte Newline
quelle
printf "-n\n"
ein Überdenken?/bin/echo
zumindest , 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 Sieprintf
stattdessen, sofern verfügbar. Diese Referenzseite bietet weitere Details und erklärt sehr gut, wann und wieecho
undprintf
sollte verwendet werden:quelle
Im Bash-Skript können Sie Folgendes ausführen:
Oder in interaktiver Shell:
Das ist
echo
ein-
Charakter und einn
Charakter.quelle
-pilot6@Pilot6:~$
. Die zweiten Ausgängen
.&&
- ich würde nicht wirklich sagen, dass diese Antwort falsch ist .Drei weitere Möglichkeiten:
quelle
Du kannst rennen
Getestet in Busybox Ash
quelle
ash
ist der Name der Almquist Shell.