Por que “wc -c” imprime um valor de mais com echo?

12

Ao executar

echo abcd | wc -c

retorna 5 .
Mas a palavra abcd tem apenas 4 caracteres.

A echo está imprimindo algum caractere especial após a palavra abcd ?

E eu posso impedir que echo imprima isso?

    
por user78050 21.08.2014 / 19:45

3 respostas

20

echo print newline ( \n ) no final da linha

echo abcd | xxd
0000000: 6162 6364 0a          abcd.

Com algumas implementações echo , você pode usar -n :

-n do not output the trailing newline

e teste:

echo -n abcd | wc -c
4

Com alguns outros, você precisa da sequência de escape \c :

\c: Suppress the <newline> that otherwise follows the final argument in the output. All characters following the '\c' in the arguments shall be ignored.

echo -e 'abcd\c' | wc -c
4

Portavelmente, use printf :

printf %s abcd | wc -c
4

(observe que wc -c conta bytes, não caracteres (embora no caso de abcd eles sejam geralmente equivalentes). Use wc -m para contar caracteres).

    
por 21.08.2014 / 19:51
4

Se você executar echo sem a opção -n , ele escreve um caractere de nova linha após os argumentos. Caso contrário, se você digitou echo foo , seu próximo prompt de shell apareceria à direita do foo . Então, wc está contando a nova linha.

How can I prevent echo from printing that?

echo -n abcd | wc -c
    
por 21.08.2014 / 19:52
2

Por padrão, echo imprimirá um caractere de nova linha ( \n ) após a string (e é por isso você vê o prompt do shell na próxima linha, em vez da mesma linha em que abcd é impresso.)

Você pode tentar adicionar um parâmetro -n a echo para desativar o caractere de nova linha à direita.

echo -n abcd | wc -c
4
    
por 21.08.2014 / 19:54