wc -c와 ${#}의 차이점은 무엇입니까?

wc -c와 ${#}의 차이점은 무엇입니까?

base64를 사용하여 문자열을 28번 인코딩하는 스크립트를 만들었습니다. 그런 다음 출력 문자열에 문자 수를 표시하고 싶습니다.

${#var}처음에는 그것을 사용하여 34070을 얻었습니다.

그런 다음 같은 로프를 사용해 보았습니다.

script.sh | wc -c

이것은 나에게 34071을 제공합니다.

#!/bin/bash
var="9M"
for i in {1..28};do
var=$(echo $var | base64)
done
echo ${#var}

이 두 출력이 정확히 어떻게 다른가요?

답변1

이 예에서 볼 수 있듯이 show bytes 명령을 사용하면 od개행 문자가 인쇄됩니다.

$ 에코 foo OD-CB |
0000000 부자  \N
        146 157 157 012
0000004

따라서 이 경우 개행 문자 wc -c도 계산됩니다 .wc -m

개행 없이:

$ echo -n foo | od -c -b
0000000   f   o   o
        146 157 157
0000003

따라서 를 사용하는 경우 개행 문자를 인쇄하지 않도록 echo해당 옵션을 추가하거나 다음을 수행 하십시오 .-nprintf

$ printf "%s" foo | od -c -b
0000000   f   o   o
        146 157 157
0000003

답변2

추가 문자는 개행 문자입니다. 예를 들어 다음과 같이 하면 이를 볼 수 있습니다.

echo $var | hd | tail

관련 정보