¿Cómo imprimir un nuevo carácter de línea con eco?


15

Volcado una cadena con hexdumpesto 2031 3334 2e30 0a32 2032 3331 302e 000a. Está claro que 0x0aes un nuevo carácter de línea, sin embargo, cuando trato de hacer eco de esta cadena, siempre obtengo 1 430.2 2 13.0: la nueva línea se reemplaza con un espacio, incluso uso la -ebandera.

¿Cuál puede ser el problema? ¿La cola \0arruina la salida? ¿Hay alguna alternativa para imprimir 0x0auna nueva línea?

Gracias y un saludo.


cuando trato de hacer eco de esta cadena ¿Cómo exactamente haces eso? ¿Cuál es el comando exacto que usas?
Dennis

@ Dennis quiero decir echo -e. Gracias, encuentro una solución.
Summer_More_More_Tea

1
la solución preferida es solo usar en printf "...\n"lugar de echo.
michael

Respuestas:


26

El nuevo carácter de línea con el echocomando es "\ n". Tomando el siguiente ejemplo:

echo -e "This is line 1\nThis is line 2"

Daría como resultado la salida

This is line 1
This is line 2

El parámetro "-e" es importante aquí.


3
por cierto, esto se "echo -e ..."basa en el eco de bash para funcionar correctamente (por ejemplo, dashsolo imprimirá "-e"); pero '/ bin / echo' puede (o no) también funcionar. Desafortunadamente (tal vez apropiadamente), hay muchos ecos, y realmente no quieres preocuparte por cuál vas a obtener. Usar 'printf "....\n"es una opción más portátil a través de env's y shells.
michael

@michael_n, que es lo que el OP finalmente también revirtió , de hecho. Pero la pregunta decía explícitamente "con eco", de ahí mi respuesta de esta manera. De todos modos, no fue "con Bash", ¡así que gracias por señalar esas diferencias!
Izzy

4

POSIX 7 dice que no puedes

http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html

-e no está definido y las barras diagonales inversas están definidas en la implementación:

Si el primer operando es -n, o si alguno de los operandos contiene un carácter <backslash>, los resultados están definidos por la implementación.

a menos que tenga una extensión XSI opcional.

Entonces use printfen su lugar:

el operando de formato se utilizará como la cadena de formato descrita en la notación de formato de archivo XBD [...]

la notación de formato de archivo :

\ n <línea nueva> Mueva la posición de impresión al comienzo de la línea siguiente.

También tenga en cuenta que Ubuntu 15.10 y la mayoría de las distribuciones implementan echotanto como:

  • un Bash incorporado: help echo
  • un ejecutable independiente: which echo

lo que puede generar cierta confusión.


2

Finalmente formateo correctamente esta cadena con printf "$string". Gracias a todos.


¿De qué es esto de lo $stringque hablas? ¿Cómo se relaciona esto con la pregunta? ¿Qué es lo que no implica \ncomo en las otras dos respuestas?
Peter Mortensen
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.