なぜ「wc -c」はエコーでもう1つの値を出力するのですか?


13

実行中

echo abcd | wc -c

戻ります5
ただし、単語のabcd長さはわずか4文字です。

されたecho単語の後にいくつかの特殊文字を印刷しますかabcd

そして、それをecho印刷しないようにできますか?



1
wc -c何文字かは教えてくれないことに注意してください。それはそれが何バイトかを伝えるだけです。
tchrist 14

回答:


21

echo\n行末に改行()を出力します

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

一部のecho実装では、次を使用できます-n

-n 末尾の改行を出力しません

およびテスト:

echo -n abcd | wc -c
4

他のいくつかでは、\cエスケープシーケンスが必要です。

\c<newline>出力の最後の引数に続くものを抑制します。'\c'引数に続くすべての文字は無視されます。

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

移植可能printf

printf %s abcd | wc -c
4

wc -c文字ではなくバイトをカウントすることに注意してください(ただし、abcdそれらは一般に同等です。wc -m文字をカウントするために使用します)。


ポイントは、一部のecho実装(少なくともすべてのUnix準拠のもの)では、echo 'abcd\c'出力abcdのみであることに注意してください。echo -e 'abcd\c'Unix準拠のecho実装では、が出力されます-e abcd
ステファンシャゼル

5

オプションechoなしで実行すると-n、引数の後に改行文字が書き込まれます。そうでない場合、を入力するecho fooと、次のシェルプロンプトがの右側に表示されますfoo。だから、  wc改行をカウントしています。

echoそれを印刷しないようにするにはどうすればよいですか?

echo -n abcd | wc -c

2

デフォルトでechoは、文字列の後に改行文字\n)を印刷します(これは、abcd印刷されるのと同じ行ではなく、次の行にシェルプロンプトが表示される理由です)。

-nパラメータを追加してecho、末尾の改行文字を無効にすることができます。

echo -n abcd | wc -c
4
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.