bash - variable - shell script breakline




Echo newline no Bash imprime literal \ n (12)

No Bash, tentei isso:

echo -e "hello\nworld"

Mas não imprime uma nova linha, apenas \n . Como posso imprimir a nova linha?

Estou usando o Ubuntu 11.04.


À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 notifcações de várias linhas:

#!/bin/bash
notify-send 'notification success' 'another line' 'time now '`date +"%s"`

Existe uma nova expansão de parâmetro incluída no bash 4.4 que interpreta sequências de escape:

${[email protected]} - E operator

A expansão é uma string que é o valor do parâmetro com sequências de escape de barra invertida expandidas como no mecanismo de cotação $'…' .

$ foo='hello\nworld'
$ echo "${[email protected]}"
hello
world

Isso funciona para mim em raspbian,

echo -e "hello\\nworld"


Isso funciona para mim no CentOS:

echo -e ""hello\nworld""

Mais uma entrada aqui para aqueles que não conseguiram trabalhar com qualquer uma 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;

Só que esse truque funcionou em um linux que eu estava trabalhando com esse bash:

GNU bash, version 2.2.25(1)-release (x86_64-redhat-linux-gnu)

Espero que ajude alguém com problema semelhante.


Meu script:

echo "WARNINGS: $warningsFound WARNINGS FOUND:\n$warningStrings

Saída:

WARNING : 2 WARNINGS FOUND:\nWarning, found the following local orphaned signature file:

No meu roteiro de bash eu estava ficando com raiva de você até que eu tentei:

echo "WARNING : $warningsFound WARNINGS FOUND:
$warningStrings"

Basta apertar enter onde você deseja inserir esse salto. Saída agora é:

WARNING : 2 WARNINGS FOUND:
Warning, found the following local orphaned signature file:

Tem certeza de que está em festa? Funciona para mim, das três formas:

echo -e "Hello\nworld"
echo -e 'Hello\nworld'
echo Hello$'\n'world

Você poderia usar printf vez disso:

printf "hello\nworld\n"

printf tem um comportamento mais consistente do que o echo . O comportamento do echo varia muito entre diferentes versões.


Você também pode fazer:

echo "hello
world"

Isso funciona para mim no meu macOS.


Você também pode usar o eco com chaves,

$ (echo hello; echo world)
hello
world

echo $'hello\nworld'

impressões

hello
world

$'' strings usam ANSI C Quoting :

Palavras do formulário $' string ' são tratadas especialmente. A palavra se expande para string , com caracteres de escape com barra invertida substituídos conforme especificado pelo padrão ANSI C.


str='hello\nworld'
$ echo | sed "i$str"
hello
world






newline