Come stampare un nuovo carattere di linea con l'eco?


15

Dump una stringa con in hexdumpquesto modo 2031 3334 2e30 0a32 2032 3331 302e 000a. È chiaro che si 0x0atratta di un nuovo carattere di linea, tuttavia, quando provo a fare eco a questa stringa, ottengo sempre 1 430.2 2 13.0: la nuova linea viene sostituita da uno spazio, anche se uso la -ebandiera.

Quale potrebbe essere il problema? Il tailing \0rovina l'output? Esistono alternative per stampare 0x0auna nuova linea?

Grazie e distinti saluti.


quando provo a fare eco a questa stringa. Come lo fai esattamente? Qual è il comando esatto che usi?
Dennis,

@Dennis intendo echo -e. Grazie, trovo una soluzione.
Summer_More_More_Tea

1
la soluzione preferita è solo da usare printf "...\n"invece di echo.
michael,

Risposte:


26

Il nuovo carattere di riga con il echocomando è "\ n". Prendendo il seguente esempio:

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

Provocherebbe l'output

This is line 1
This is line 2

Il parametro "-e" è importante qui.


3
tra l'altro, questo "echo -e ..."si basa sull'eco di bash per funzionare correttamente (ad es. dashstamperà semplicemente "-e"); ma '/ bin / echo' può (o non può) funzionare anche. Sfortunatamente (forse in modo appropriato), ci sono un sacco di echi in giro e non vuoi davvero preoccuparti di quello che stai per ottenere. L'utilizzo 'printf "....\n"è un'opzione più portatile tra env e shell.
michael,

@michael_n che è anche quello che alla fine è stato ripristinato , di fatto. Ma la domanda stava esplicitamente affermando "con l'eco", quindi la mia risposta in questo modo. Comunque, non è stato "con Bash" - quindi grazie per aver sottolineato queste differenze!
Izzy,

4

POSIX 7 dice che non puoi

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

-e non è definito e le barre rovesciate sono definite dall'implementazione:

Se il primo operando è -n o se uno qualsiasi degli operandi contiene un carattere <barra rovesciata>, i risultati sono definiti dall'implementazione.

a meno che tu non abbia un'estensione XSI opzionale.

Quindi usa printfinvece:

l'operando di formato deve essere usato come stringa di formato descritta nella notazione del formato di file XBD [...]

la notazione sul formato del file :

\ n <nuova> Sposta la posizione di stampa all'inizio della riga successiva.

Inoltre, tieni presente che Ubuntu 15.10 e la maggior parte delle distribuzioni implementano echoentrambi come:

  • un Bash integrato: help echo
  • un eseguibile autonomo: which echo

che può creare confusione.


2

Alla fine ho formattato correttamente questa stringa con printf "$string". Grazie a tutti.


Di $stringche cosa parli? In che modo questo è collegato alla domanda? Cosa non comporta \ncome nelle altre due risposte?
Peter Mortensen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.