実行中
echo abcd | wc -c
戻ります5
。
ただし、単語のabcd
長さはわずか4文字です。
されたecho
単語の後にいくつかの特殊文字を印刷しますかabcd
?
そして、それをecho
印刷しないようにできますか?
wc -c
何文字かは教えてくれないことに注意してください。それはそれが何バイトかを伝えるだけです。
実行中
echo abcd | wc -c
戻ります5
。
ただし、単語のabcd
長さはわずか4文字です。
されたecho
単語の後にいくつかの特殊文字を印刷しますかabcd
?
そして、それをecho
印刷しないようにできますか?
wc -c
何文字かは教えてくれないことに注意してください。それはそれが何バイトかを伝えるだけです。
回答:
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
。
オプションecho
なしで実行すると-n
、引数の後に改行文字が書き込まれます。そうでない場合、を入力するecho foo
と、次のシェルプロンプトがの右側に表示されますfoo
。だから、 wc
改行をカウントしています。
echo
それを印刷しないようにするにはどうすればよいですか?
echo -n abcd | wc -c
printf
より優れているのecho
ですか?