Para aqueles que dizem "funciona para mim", o comportamento do eco varia bastante entre as versões. Alguns até imprimem o "-e" como parte de sua saída. Se você deseja um comportamento previsível para algo não trivial, use printf (como na resposta de @ sth).
Gordon Davisson 12/12
6
Não consegui obter nenhuma das sugestões desta resposta funcionando porque, como se vê, eu estava tentando usá-lo em uma função que retorna um valor , e todas as mensagens de eco (e printf) na função estavam sendo anexadas a o valor de retorno após a remoção individual de novas linhas . Aqui está uma pergunta sobre isso, com uma resposta extremamente completa: stackoverflow.com/questions/27872069/… Essa foi uma excursão misteriosa de três horas.
precisa saber é o seguinte
8
Também notável: em Unix e Linux Stack Exchange, a resposta aceita para Como adicionar novas linhas ao usar echo
Graham Perrin
@ GrahamPerrin, obrigado pelo link para uma resposta muito boa e detalhada! Eu acho que é melhor do que as respostas abaixo.
Konstantin
2
echo -ne "hello \ nworld" (você precisava do sinalizador n para interpretar escapes) - mas como outros dizem, diferentes comandos de eco podem ter resultados diferentes!
Konchog 28/03
Respostas:
2878
Você pode usar printf:
printf "hello\nworld\n"
printftem um comportamento mais consistente do que echo. O comportamento de echovaria muito entre versões diferentes.
ou mesmo printf %"s\n" hello world- printf vai reutilizar o formato se muitos argumentos são dadas
glenn jackman
28
O OP perguntou sobre eco, não printf; e a resposta do @ choroba abaixo, que usa a opção -e, preenche a conta perfeitamente.
JESii 27/05
57
@ JESii: Serve se o seu echosuporte for a -eopção.
sth 27/05
11
Com algumas versões de echo, -eé apenas impresso na própria saída, então eu acho que essa resposta é perfeitamente válida, pois echonão é consistente aqui (a menos que estejamos falando de uma versão específica).
Tejas Manohar
14
Isso é bom se printf estiver disponível, mas, diferentemente do eco, às vezes o printf não está na distribuição.
precisa saber é o seguinte
1713
Tem certeza de que está no bash? Funciona para mim, de todas as quatro maneiras:
flag -e fez isso por mim, que "permite interpretação dos escapes de barra invertida"
Tandy
21
Eu acho que o -eparam não existe em todos os sistemas operacionais * nix
kenorb
12
@kenorb: Existe no bash. É um builtin.
choroba 4/13
Por que o terceiro funciona? Sem o $ ele retorna "Hello n world"
Evan Donovan
21
Conforme mencionado por vários outros -e NÃO funciona em todas as distribuições e versões. Em alguns casos, é ignorado e, em outros, será realmente impresso. Eu não acredito que este fixa-lo para o OP, portanto, não deve ser aceito resposta
Palavras da forma são tratadas especialmente. A palavra se expande para cadeia , com caracteres de escape com barra invertida substituídos conforme especificado pelo padrão ANSI C.$'string'
@EvgeniSergeev Não sei o que você quer dizer, mas também não funcionou para mim. E isso é porque eu estava usando aspas duplas e isso funciona apenas com aspas simples! Tentei no Terminal no Mac.
trss 01/10/16
11
Problemas com variáveis na cadeia não sendo expandidas.
Willemdh 3/11
Você ainda pode concatenar cadeias de aspas duplas. `foo =" bar "; echo $ '' $ foo'efoot ''
echo ""funciona para mim e acho que é a forma mais simples de imprimir uma nova linha, mesmo que isso não responda diretamente à pergunta. Felicidades.
Mario Awad
2
Eu acho que é menos óbvio (e, portanto, potencialmente mais confuso) do que echo -en "\n".
precisa saber é o seguinte
72
echoé suficiente para obter uma linha vazia
ROMANIA_engineer
5
@Okneloper Funciona muito bem para mim.
Matthew Leia
71
Tentar
echo -e "hello\nworld"
hello
world
trabalhou para mim no nanoeditor.
Na página do manual:
-e ativar a interpretação de escapes de barra invertida
Se houver alguém batendo a cabeça contra a parede, tentando descobrir por que o roteiro de um colega de trabalho não imprime novas linhas, procure por isso ->
#!/bin/bashfunction GET_RECORDS(){
echo -e "starting\n the process";}
echo $(GET_RECORDS);
Como acima, a própria execução do método pode ser envolvida em um eco que substitui qualquer eco que possa estar no próprio método. Obviamente, eu aguentei isso por brevidade, não era tão fácil de detectar!
Você pode então informar seus camaradas que uma maneira melhor de executar funções seria assim:
#!/bin/bashfunction GET_RECORDS(){
echo -e "starting\n the process";}
GET_RECORDS;
Resposta amplamente subestimada, não posso acreditar que esta pergunta tenha acumulado mais de 20 respostas desde 2011 e que nenhuma delas contém esta solução simples.
Prometheus
alias c = 'eco; eco; eco; eco; eco; eco; eco; eco; eco; eco; eco; eco; eco; eco; eco; eco; eco; eco; eco; eco; eco; eco; eco; eco; eco; eco; eco; eco; eco; eco; eco; eco; eco; eco; eco; echo; ' Esta é a única maneira de limpar minha tela, obrigado!
Ahi Tuna
Tuna @Ahi: Por favor, use os atalhos de teclado do console, em vez :)
R Sun
@RSun e como eu faria isso em uma janela de terminal Debian em um Chromebook?
Ahi Tuna
1
@AhiTuna clear; ou ctrl + l;
Mike Seeds
16
str='hello\nworld'
$ echo | sed "i$str"
hello
world
Isso funciona tanto dentro de um script quanto na linha de comando.
Na linha de comando, pressione Shift+ Enterpara fazer as quebras de linha dentro da sequência.
Isso funciona para mim no meu macOS e no meu Ubuntu 18.04
Como você digita essa quebra de linha sem ter o shell para executar o comando quando você pressiona 'enter'?
Xenos
@ Xenos Isso funciona bem em um script. E no console, basta clicar em Shift + Enter para adicionar uma nova linha para evitar que o shell execute o comando inacabado.
vinzee
5
Mais uma entrada aqui para aqueles que não o fizeram funcionar com nenhuma dessas soluções e precisam obter um valor de retorno de sua função:
function foo(){local v="Dimi";local s="";.....
s+="Some message here $v $1\n".....
echo $s
}
r=$(foo "my message");
echo -e $r;
Somente esse truque funcionou em um linux no qual eu estava trabalhando com este bash:
GNU bash, version 2.2.25(1)-release (x86_64-redhat-linux-gnu)
Apenas uma observação, você provavelmente desejará usar $ {} em torno de seus nomes de variáveis, pois isso não pode levar a comportamentos realmente estranhos quando um shell encontra uma variável chamada $ warningsFound e imprime essas e não as duas saídas separadas.
dragon788
@ dragon788 talvez esteja faltando alguma coisa, mas a variável é realmente chamada $ warningsFound?
psynnott
2
Eu perdi uma palavra nisso. Se você tivesse uma variável chamada $ warnings, em alguns casos sem usar $ {warningsFound}, poderia acabar com o conteúdo de $ warnings + "Found" em vez da variável que você pretendia.
erro de sintaxe próximo ao token inesperado `('quando chamado no arquivo .sh
cosbor11
1
tenteecho hello; echo world
Avinash Raj
1
Ou "eco olá && eco mundo" ou apenas: "eco olá eco mundo"
csga5000 15/16
3
Isso poderia ser melhor feito como
x="\n"
echo -ne $x
A opção -e interpretará barras invertidas para a sequência de escape
-n opção removerá a nova linha à direita na saída
PS: o comando eco tem o efeito de sempre incluir uma nova linha à direita na saída, portanto -n é necessário para desativar essa coisa (e torná-la menos confusa)
Se você estiver escrevendo scripts e ecoando novas linhas como parte de outras mensagens várias vezes, uma boa solução de plataforma cruzada é colocar uma nova linha literal em uma variável como esta:
newline='
'
echo "first line$newlinesecond line"
echo "Error: example error message n${newline}${usage}">&2#requires usage to be defined
Isto está incorreto. Nunca é interpretado como \n. Ele é interpretado como um argumento separado para o programa, e o próprio programa pode exibir esse argumento em uma nova linha, mas isso não significa que foi convertido para \nqualquer momento e é totalmente dependente do programa.
Score_Under
0
Eu tive que colocar o texto entre aspas duplas enquanto usava como alias no perfil do bash (MacOx, iTerm).
Nos casos, você deve repetir várias linhas do conteúdo longo (como código / configurações)
Por exemplo :
Um script Bash para gerar códigos / configurações
echo -e,
printfpode ter alguma limitação
Você pode usar um caractere especial como um espaço reservado como uma quebra de linha (como ~) e substituí-lo depois que o arquivo foi criado usandotr
echo ${content}| tr '~''\n'> $targetFile
ele precisa chamar outro programa ( tr) que deve estar bem na IMO.
Respostas:
Você pode usar
printf
:printf
tem um comportamento mais consistente do queecho
. O comportamento deecho
varia muito entre versões diferentes.fonte
printf %"s\n" hello world
- printf vai reutilizar o formato se muitos argumentos são dadasecho
suporte for a-e
opção.echo
,-e
é apenas impresso na própria saída, então eu acho que essa resposta é perfeitamente válida, poisecho
não é consistente aqui (a menos que estejamos falando de uma versão específica).Tem certeza de que está no bash? Funciona para mim, de todas as quatro maneiras:
fonte
-e
param não existe em todos os sistemas operacionais * niximpressões
$''
cordas usar ANSI C Citando :fonte
Você sempre pode fazer
echo ""
.por exemplo
fonte
echo ""
funciona para mim e acho que é a forma mais simples de imprimir uma nova linha, mesmo que isso não responda diretamente à pergunta. Felicidades.echo -en "\n"
.echo
é suficiente para obter uma linha vaziaTentar
trabalhou para mim no
nano
editor.Na página do manual:
fonte
Se houver alguém batendo a cabeça contra a parede, tentando descobrir por que o roteiro de um colega de trabalho não imprime novas linhas, procure por isso ->
Como acima, a própria execução do método pode ser envolvida em um eco que substitui qualquer eco que possa estar no próprio método. Obviamente, eu aguentei isso por brevidade, não era tão fácil de detectar!
Você pode então informar seus camaradas que uma maneira melhor de executar funções seria assim:
fonte
Isso funciona para mim em Raspbian,
fonte
POSIX 7 em eco
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html
-e
não está definido e as barras invertidas são definidas para implementação:a menos que você tenha uma extensão XSI opcional.
Portanto, recomendo que você use
printf
, o que é bem especificado:a notação de formato de arquivo :
Lembre-se também de que o Ubuntu 15.10 e a maioria das distribuições implementam
echo
ambos como:help echo
which echo
o que pode levar a alguma confusão.
fonte
Basta digitar
para obter uma nova linha
fonte
fonte
Funciona para mim no CentOS:
fonte
Você também pode fazer:
Isso funciona tanto dentro de um script quanto na linha de comando.
Na linha de comando, pressione Shift+ Enterpara fazer as quebras de linha dentro da sequência.
Isso funciona para mim no meu macOS e no meu Ubuntu 18.04
fonte
Mais uma entrada aqui para aqueles que não o fizeram funcionar com nenhuma dessas soluções e precisam obter um valor de retorno de sua função:
Somente esse truque funcionou em um linux no qual eu estava trabalhando com este bash:
Espero que ajude alguém com problema semelhante.
fonte
Meu script:
Resultado:
No meu script bash, eu estava ficando louco como você, até que tentei:
Basta pressionar enter onde deseja inserir esse salto. A saída agora é:
fonte
Você também pode usar eco com aparelho,
fonte
echo hello; echo world
Isso poderia ser melhor feito como
A opção -e interpretará barras invertidas para a sequência de escape
-n opção removerá a nova linha à direita na saída
PS: o comando eco tem o efeito de sempre incluir uma nova linha à direita na saída, portanto -n é necessário para desativar essa coisa (e torná-la menos confusa)
fonte
Há uma nova expansão de parâmetro adicionada
bash 4.4
que interpreta seqüências de escape:fonte
Se você estiver escrevendo scripts e ecoando novas linhas como parte de outras mensagens várias vezes, uma boa solução de plataforma cruzada é colocar uma nova linha literal em uma variável como esta:
fonte
Às vezes, você pode passar várias strings separadas por um espaço e elas serão interpretadas como
\n
.Por exemplo, ao usar um script de shell para notificações de várias linhas:
fonte
\n
. Ele é interpretado como um argumento separado para o programa, e o próprio programa pode exibir esse argumento em uma nova linha, mas isso não significa que foi convertido para\n
qualquer momento e é totalmente dependente do programa.Eu tive que colocar o texto entre aspas duplas enquanto usava como alias no perfil do bash (MacOx, iTerm).
fonte
Isso me levou até lá ....
Rendimentos:
fonte
Eu apenas uso eco sem argumentos
fonte
Solução adicional:
Nos casos, você deve repetir várias linhas do conteúdo longo (como código / configurações)
Por exemplo :
echo -e
,printf
pode ter alguma limitaçãoVocê pode usar um caractere especial como um espaço reservado como uma quebra de linha (como
~
) e substituí-lo depois que o arquivo foi criado usandotr
ele precisa chamar outro programa (
tr
) que deve estar bem na IMO.fonte