実行中
echo abcd | wc -c
5
を返します。
しかし、単語abcd
は4文字しかありません。
echo
は単語の後に特殊文字を印刷していますかabcd
?
そして、echo
がそれを印刷しないようにできますか?
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
を使用します)。
-n
オプションなしでecho
を実行すると、引数の後に改行文字が書き込まれます。それ以外の場合、echo foo
と入力すると、次のシェルプロンプトがfoo
の右側に表示されます。つまり、wc
は改行をカウントしています。
echo
がそれを印刷しないようにするにはどうすればよいですか?
echo -n abcd | wc -c
デフォルトでは、echo
は文字列の後に 改行文字 (\n
)を出力します(そのため、同じ行ではなく次の行にシェルプロンプトが表示されます) abcd
が出力されます。)
-n
パラメータをecho
に追加して、末尾の改行文字を無効にすることができます。
echo -n abcd | wc -c
4