wc <<<"$string"이 printf "$string" 화장실보다 1바이트 더 길게 표시되는 이유는 무엇입니까?

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

이것이 - IMHO 혼란스러운 - 행동이 어딘가에 문서화되어 있습니까? 여기서 거래는 무엇입니까 wc? 이것은 가정된 개행입니까?

답변1

차이점은 여기서 문자열에 추가된 줄 바꿈으로 인해 발생합니다. 바라보다배쉬 매뉴얼:

결과는 표준 입력(또는 파일 설명자)의 명령에 개행 문자가 추가된 단일 문자열로 제공됩니다.N만약에N지정).

wc계산 방법은 동일하지만 입력이 다릅니다.

답변2

이것은 문자열 리디렉터에 의해 여기에 추가된 후속 줄 바꿈입니다.

$ 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

관련 정보