Como imprimir um novo caractere de linha com eco?

15

Eu despejo uma corda hexdumpassim 2031 3334 2e30 0a32 2032 3331 302e 000a. É claro que 0x0aé um caractere de nova linha, no entanto, quando tento repetir essa string, sempre obtive 1 430.2 2 13.0- a nova linha é substituída por um espaço, até eu uso o -esinalizador.

Qual pode ser o problema? O rejeito \0arruina a saída? Existe alguma alternativa para imprimir 0x0auma nova linha?

Obrigado e cumprimentos.

Summer_More_More_Tea
fonte
quando tento ecoar essa string Como exatamente você faz isso? Qual é o comando exato que você usa?
Dennis
@ Dennis, quero dizer echo -e. Obrigado, encontro uma solução.
Summer_More_More_Tea
1
a solução preferida é apenas usar em printf "...\n"vez de echo.
31515 Michael
stackoverflow.com/questions/8467424/…
Ciro Santilli deve ser executado em

Respostas:

26

O novo caractere de linha com o echocomando é "\ n". Tomando o seguinte exemplo:

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

Resultaria na saída

This is line 1
This is line 2

O parâmetro "-e" é importante aqui.

Izzy
fonte
3
Aliás, isso "echo -e ..."depende do eco do bash para funcionar corretamente (por exemplo, dashapenas imprimirá o "-e"); mas '/ bin / eco' pode (ou não) também funcionar. Infelizmente (talvez apropriadamente), há muitos ecos por aí, e você realmente não quer se preocupar com o que vai receber. Usar 'printf "....\n"é uma opção mais portátil entre envs e shells.
31515 Michael
@michael_n, que é o que o OP finalmente reverteu também , de fato. Mas a pergunta dizia explicitamente "com eco" - daí a minha resposta dessa maneira. De qualquer forma, não foi "com o Bash" - então, obrigado por apontar essas diferenças!
Izzy
4

O POSIX 7 diz que você não pode

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

-e não está definido e as barras invertidas são definidas para implementação:

Se o primeiro operando for -n ou se algum dos operandos contiver um caractere <slash>, os resultados serão definidos pela implementação.

a menos que você tenha uma extensão XSI opcional.

Então use printf:

O operando de formato deve ser usado como a string de formato descrita em XBD File Format Notation [...]

a notação de formato de arquivo :

\ n <nova linha> Mova a posição de impressão para o início da próxima linha.

Lembre-se também de que o Ubuntu 15.10 e a maioria das distribuições implementam echoambos como:

  • um Bash embutido: help echo
  • um executável independente: which echo

o que pode levar a alguma confusão.

Ciro Santilli adicionou uma nova foto
fonte
2

Finalmente, formate corretamente essa string com printf "$string". Obrigado a todos.

Summer_More_More_Tea
fonte
O que é isso $stringque você fala? Como isso está conectado à pergunta? O que não envolve, \ncomo nas outras duas respostas?
Peter Mortensen