「wc -c」がエコーに異なる値1を出力するのはなぜですか?

「wc -c」がエコーに異なる値1を出力するのはなぜですか?

走っている間

echo abcd | wc -c

それが返されます5
しかし、単語のabcd長さは4文字にすぎません。

echo単語の後に特殊文字を印刷してください。abcd

echo印刷されないようにできますか?

答え1

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文字数を計算するために使用されます)。

答え2

echoこのオプションなしで実行すると、引数の-n後に改行文字が作成されます。そうでないと入力すると、echo foo次のシェルプロンプトが右側に表示されますfoowc改行文字を計算する場合も同様です。

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

echo -n abcd | wc -c

答え3

基本echo的に改行文字\n)文字列の後に(abcd同じ行ではなく次の行にシェルプロンプトが表示されます)

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

echo -n abcd | wc -c
4

関連情報