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
해당 옵션을 추가하거나 다음을 수행 하십시오 .-n
printf
$ printf "%s" foo | od -c -b
0000000 f o o
146 157 157
0000003
답변2
추가 문자는 개행 문자입니다. 예를 들어 다음과 같이 하면 이를 볼 수 있습니다.
echo $var | hd | tail