web-dev-qa-db-ja.com

wc <<< "$ string"がprintf "$ string"よりも1バイト長い長さを示すのはなぜですか|トイレ?

誤って、wcはbashから入力を取得する方法に応じて、カウントが異なることがわかりました。

$ s='hello'
$ wc -m <<<"$s"
6
$ wc -c <<<"$s"
6
$ printf '%s' "$s" | wc -m
5
$ printf '%s' "$s" | wc -c
5

これは-私見の混乱-どこかに文書化された行動ですか?ここでwcは何を数えますか-これは想定される改行ですか?

11
rexkogitans

違いは、ヒア文字列に追加された改行が原因です。 Bashマニュアル を参照してください:

結果は、標準入力(またはファイル記述子nifnが指定されている)。

wcも同じようにカウントされますが、その入力は異なります。

38
Stephen Kitt

これは、ヒア文字列リダイレクタによって追加された後続の改行です。

$ s="hello"
$ hexdump -C <<<"$s"
00000000  68 65 6c 6c 6f 0a                                 |hello.|
00000006
$ printf "$s" | hexdump -C
00000000  68 65 6c 6c 6f                                    |hello|
00000005
26
Murphy