2010-04-15 12 views
6

Warum
$ echo '-n'
nicht auf Terminal nicht schreiben -n obwohl -n in Anführungszeichen geschrieben?Echo Newline Unterdrückung

+0

Welche Sprache verwenden Sie? – thecoshman

+0

Ich vermute, dass dies eine Shell-Syntax-Frage ist (dh bash oder was auch immer). – Pointy

Antwort

8

Da die Anführungszeichen von der Shell verarbeitet werden, erhält der echo-Befehl -n. Wenn Sie das Echo -n wiedergeben möchten, können Sie z. printf '%s\n' -n

+2

ist es eine Schande '--' (Ende der Optionen) wird nicht unterstützt :( – extraneon

+0

Folgendes funktioniert mit bash: echo -e -n \\ c – Tino

0

Die Zitate helfen nicht, weil ... ugh, es ist schwer zu erklären. Die Shell streift die Anführungszeichen ab, bevor der "echo" -Befehl selbst ausgewertet wird, so dass sie zu diesem Zeitpunkt keine Rolle spielen.

Try this:

echo - -n 

, die nicht dokumentiert ist, als Arbeit (ich bin mit Ubuntu Linux), aber echo an Sicherheit grenzender Wahrscheinlichkeit ein eingebaut, um alles, was Shell Sie verwenden, so dass der Mann Seite ist fraglich sowieso. Es funktioniert für mich. (Ich lasse zsh laufen, weil ich wirklich höflich und hoch entwickelt bin).

bearbeiten: gut es scheint, dass die bash builtin edit nicht so verhält. Ich weiß nicht, was ich vorschlagen soll; dies:

echo '' -n 

geben Ihnen „-n“ durch ein Leerzeichen vorangestellt, die (je nachdem, was Sie tun) könnte in Ordnung sein.

+0

Funktioniert nicht für mich. Ausgabe '- -n' – extraneon

+0

Für mich das tut das > echo - -n - -n –

+0

Hmm, wie ich gerade in einem Schnitt bemerkt habe, variiert es wahrscheinlich von Schale zu Schale. – Pointy

2

sollten Sie versuchen, die tragbarere printf so weit wie möglich zu verwenden.

2

könnten Sie versuchen,

echo -e '\055n' 
0

Nicht quiete dort:

echo -e 'a-n\b\b\b ' 
-n 

raschend dies funktioniert:

echo -e '-n\b' 
-n 

und hier eine Lösung kann ich erklären:

echo "foobar" | sed 's/.*/-n/' 
-n 
I
2

festgestellt, dass die folgenden funktioniert nur in bash:

echo -n PRINT_THIS 

Also, sollten Sie den ersten Platz setzen -n.