¿Por qué "wc -c" imprime un valor de uno más con echo?


Respuestas:


21

echoimprimir nueva línea ( \n) al final de la línea

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

Con algunas echoimplementaciones, puede usar -n:

-n no muestre la nueva línea final

y prueba:

echo -n abcd | wc -c
4

Con algunos otros, necesita la \csecuencia de escape:

\c: Suprima el <newline>que de lo contrario sigue al argumento final en la salida. Todos los caracteres que siguen a los '\c'en los argumentos serán ignorados.

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

Portablemente, use printf:

printf %s abcd | wc -c
4

(tenga en wc -ccuenta que cuenta bytes, no caracteres (aunque en el caso de abcdque sean generalmente equivalentes). Use wc -mpara contar caracteres).


Tenga en cuenta que el punto es que con algunas echoimplementaciones (todas las que cumplen con Unix al menos), es solo la echo 'abcd\c'salida abcd. echo -e 'abcd\c'en echoimplementaciones compatibles con Unix se generarían -e abcd.
Stéphane Chazelas

5

Si ejecuta echosin la -nopción, escribe un carácter de nueva línea después de los argumentos. De lo contrario, si escribió echo foo, su próximo indicador de shell aparecerá a la derecha de foo. Entonces  wcestá contando la nueva línea.

¿Cómo puedo evitar echoimprimir eso?

echo -n abcd | wc -c

2

De forma predeterminada, echoimprimirá un carácter de nueva línea ( \n) después de la cadena (por lo que verá el indicador de shell en la siguiente línea en lugar de la misma línea donde abcdse imprime).

Puedes intentar agregar un -n parámetro echopara deshabilitar el carácter de nueva línea final.

echo -n abcd | wc -c
4
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.