Ich kann mir nicht vorstellen, wie ich die Zeichenfolge "-n" mit dem über 30 Jahre alten Befehl drucken soll echo
.
Ich habe diese ausprobiert:
Michaels:Scripts$ echo -n
Michaels:Scripts$ echo "-n"
Michaels:Scripts$ echo -e "-n"
Michaels:Scripts$ echo -- -n
-- -n
Michaels:Script$ echo -- "-n"
-- -n
Michaels:Script$ echo "\-n"
\-n
Ich benutze Mac OS X ML. Ich halte dieses Verhalten für sehr seltsam und unerwartet.
echo " -n"
Antworten:
Wenn Sie nicht verwenden möchten,
prinf
haben Sie einige Optionen, zumindest gemäß dieser SO-Frage und Antwort mit dem Titel: Echo "-n" wird nicht -n drucken? .Dies scheint Ihre beste Option zu sein:
Oder eine Variation:
printf
printf
hat dieses Problem nicht:quelle
echo -- '-n'
, was ist-- -n
.cut
teilt dann die Ausgabe auf Leerzeichen auf und nimmt das 2. Feld, daher das-n
.Warum sollten Sie verwenden möchten
echo
? Verwendungprintf
:Oder:
Mit
echo
:Wird
-n<LF>
in einer UNIX-konformen Ausgabe ausgegebenecho
.bash
,dash
GNU oderzsh
echo (in der Standardkonfiguration) kann es tun , mit:Oder (auf ASCII-basierten Systemen):
Zsh
echo
kann es tun mit:bash
(aber nichtzsh
):Interessanterweise ist es unmöglich,
-n
mitecho
POSIX allein auszugeben (dh mehr oder weniger portabel zwischen Unices und Unix-Likes), da das Verhalten, wenn das erste Argument-n
Backslash-Zeichen enthält oder wenn ein Argument Backslash-Zeichen enthält, nicht angegeben ist.quelle
echo
ist nicht portabel. Nicht benutzenecho
. Für Unix - kompatibleecho
‚secho '\055'
ausgeben würde das 0x2d Byte (-
in ASCII, aber Unix - Systeme sind nicht auf die Verwendung ASCII als ihre Basis charsets erforderlich ist , verwenden einige noch EBCDIC). Das Verhalten fürecho '\x2d'
ist jedoch nicht spezifiziert. Ebensoprintf '\055'
ist POSIX und portabel,printf '\x2d'
ist keine.Führen Sie aus historischen Gründen
echo
nicht die übliche Art der Argumentanalyse durch, bei der jedes Argument, das mit beginnt,-
eine Option ist, mit der Ausnahme, dass--
das Ende der Option signalisiert wird. Derecho
Befehl meist druckt seine Argumente unverändert, aber in Abhängigkeit von der Unix - Variante, auf der Schale und auf , wie die Shell konfiguriert ist, kann es einige Optionen (interpretieren-e
,-E
,-n
,-
) und behandeln kann Backslash + Zeichen speziell.Es gibt keine tragbare Art und Weise zu drucken ,
-n
mitecho
allein. Die tragbare Möglichkeit, eine Zeichenfolge zu drucken, ohne sich um Sonderzeichen kümmern zu müssen, istoder allgemeiner
print %s "$somestring"
. Wenn Sie nach der Zeichenfolge eine letzte neue Zeile drucken möchten, machen Sie dasprintf '%s\n' -n
.quelle
Versuchen Sie dies, wenn Sie "-n" als erste zwei Symbole benötigen:
Ein anderer Weg:
quelle
-e
gibt 4 Bytes aus:0d 2d 6e 0a
(hexadezimal geschrieben). Jede Shell, die nicht implementiert-e
wird, druckt entweder2d 65 20 5c 72 2d 6e 0a
oder2d 65 20 0d 2d 6e 0a
.echo
auf das Terminal geschrieben wird, sie befindet sich jedoch in der Ausgabe vonecho
.