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