A maneira mais fácil de ver isso é usar algo como od -c
, que imprime todos os caracteres:
$ echo 123456 | od -c
0000000 1 2 3 4 5 6 \n
0000007
$ printf 123456 | od -c
0000000 1 2 3 4 5 6
0000006
Como você pode ver, echo
imprime um \n
extra, mas printf
não. wc -c
conta bytes, não importa se o caracter em questão pode ser visto por humanos ou não, ele apenas conta o número de bytes em sua entrada.
Quanto ao que há de tão especial sobre printf
vs echo
, consulte aqui para obter mais detalhes do que você sempre quis saber.