Por que "wc -c" imprime um valor a mais com eco?


Respostas:


21

echoimprimir nova linha ( \n) no final da linha

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

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

-n não produza a nova linha à direita

e teste:

echo -n abcd | wc -c
4

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

\c: Suprima o <newline>que segue o argumento final na saída. Todos os caracteres que seguem '\c'os argumentos devem ser ignorados.

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

Portably, use printf:

printf %s abcd | wc -c
4

(observe que wc -cconta bytes, não caracteres (embora abcd, geralmente, sejam equivalentes). Use wc -mpara contar caracteres).


Observe que o ponto é que, com algumas echoimplementações (todas compatíveis com Unix, pelo menos), é apenas a echo 'abcd\c'saída abcd. echo -e 'abcd\c'em echoimplementações compatíveis com Unix seriam exibidas -e abcd.
Stéphane Chazelas

5

Se você executar echosem a -nopção, ele gravará um caractere de nova linha após os argumentos. Caso contrário, se você digitar echo foo, seu próximo prompt de shell aparecerá à direita do foo. Então,  wcestá contando a nova linha.

Como impedir a echoimpressão disso?

echo -n abcd | wc -c

2

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

Você pode tentar adicionar um -nparâmetro echopara desativar o caractere de nova linha à direita.

echo -n abcd | wc -c
4
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.