¿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.

Summer_More_More_Tea
fuente
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
stackoverflow.com/questions/8467424/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

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í.

Izzy
fuente
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.

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
fuente
2

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

Summer_More_More_Tea
fuente
¿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