Warum gibt "wc -c" einen weiteren Wert mit Echo aus?


13

Beim Laufen

echo abcd | wc -c

es kehrt zurück 5.
Das Wort abcdist jedoch nur 4 Zeichen lang.

Wird echonach dem Wort ein Sonderzeichen gedruckt abcd?

Und kann ich verhindern echo, dass das gedruckt wird?



1
Bitte beachten Sie, dass Sie nicht wissen, wc -cwie viele Zeichen etwas enthält. es gibt nur an, wie viele Bytes es sind.
Tchrist

Antworten:


21

echoNeue Zeile ( \n) am Zeilenende ausgeben

echo abcd | xxd
0000000: 6162 6364 0a          abcd.

Bei einigen echoImplementierungen können Sie Folgendes verwenden -n:

-n Geben Sie die nachfolgende Newline nicht aus

und test:

echo -n abcd | wc -c
4

Bei einigen anderen benötigen Sie die \cEscape-Sequenz:

\c: Unterdrücke das <newline>, was sonst dem letzten Argument in der Ausgabe folgt. Alle Zeichen, die '\c'den Argumenten folgen , werden ignoriert.

echo -e 'abcd\c' | wc -c
4

Portabel verwenden printf:

printf %s abcd | wc -c
4

(Beachten Sie, dass wc -cBytes und nicht Zeichen gezählt werden (obwohl abcdsie im Allgemeinen gleichwertig sind). wc -mZum Zählen von Zeichen verwenden.)


Beachten Sie, dass es bei einigen echoImplementierungen (zumindest bei allen Unix-kompatiblen) nur um die echo 'abcd\c'Ausgabe geht abcd. echo -e 'abcd\c'In Unix-kompatiblen echoImplementierungen würde ausgegeben -e abcd.
Stéphane Chazelas

5

Wenn Sie echoohne die -nOption ausführen, wird nach den Argumenten ein Zeilenumbruchzeichen geschrieben. Andernfalls wird bei der Eingabe echo foodie nächste Shell-Eingabeaufforderung rechts von angezeigt foo. So  wczählt das Newline.

Wie kann ich verhindern echo, dass das gedruckt wird?

echo -n abcd | wc -c

2

Standardmäßig echowird nach der Zeichenfolge ein Zeilenvorschubzeichen ( \n) ausgegeben. (Aus diesem Grund wird die Shell-Eingabeaufforderung in der nächsten Zeile anstelle der Zeile angezeigt, in der sie abcdgedruckt wird.)

Sie können versuchen , einen Zusatz - -nParameter auf echodie Hinter Newline - Zeichen zu deaktivieren.

echo -n abcd | wc -c
4
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.