Isso tem a ver com o comando que você está usando para canalizar a string para wc
. O comando echo
está deslizando em um caractere extra no final da sua string, test
, um novo caractere de nova linha, \n
.
Então, na verdade, você está contando isso: test\n
. Você pode desativar esse comportamento com a opção -n
para echo
.
$ echo -n "test" | wc -c
4
Ou use um comando diferente para gerar sua string, como printf
:
$ printf "%s" "test" | wc -c
4
Vendo o que está acontecendo
Você pode usar od
para ver os caracteres reais que são getitng passados para o pipe da seguinte forma:
$ echo "test" | od -c
0000000 t e s t \n
0000005
$ echo -n "test" | od -c
0000000 t e s t
0000004