bash - with - sh script new line




Echo newline in Bash stampa letterale \ n (12)

In Bash, provato questo:

echo -e "hello\nworld"

Ma non stampa una nuova riga, solo \n . Come posso far stampare la nuova riga?

Sto usando Ubuntu 11.04.


A volte puoi passare più stringhe separate da uno spazio e verrà interpretato come \n .

Ad esempio quando si utilizza uno script di shell per notifiche multi-line:

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

C'è una nuova espansione dei parametri aggiunta in bash 4.4 che interpreta le sequenze di escape:

${[email protected]} - E operator

L'espansione è una stringa che è il valore del parametro con sequenze di escape backslash espanse come con il meccanismo di quotatura $'…' .

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

La mia sceneggiatura:

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

Produzione:

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

Sul mio script bash mi stavo arrabbiando come te fino a quando non ho appena provato:

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

Basta premere Invio dove vuoi inserire quel salto. L'output ora è:

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

Nella remota possibilità che qualcuno si ritrovi a battere la testa contro il muro cercando di capire perché la sceneggiatura di un collega non stamperà newline, fai attenzione a questo ->

#!/bin/bash
function GET_RECORDS()
{
   echo -e "starting\n the process";
}

echo $(GET_RECORDS);

Come sopra, il vero funzionamento del metodo può essere esso stesso avvolto in un'eco che sostituisce qualsiasi eco che può essere nel metodo stesso. Ovviamente ho abbreviato questo per brevità, non era così facile da individuare!

Puoi quindi informare i tuoi compagni che un modo migliore per eseguire le funzioni sarebbe come tale:

#!/bin/bash
function GET_RECORDS()
{
   echo -e "starting\n the process";
}

GET_RECORDS;

Provare

echo -e "hello\nworld"
hello
world

ha funzionato per me in nano editor.


Puoi anche fare:

echo "hello
world"

Questo funziona per me sul mio macOS.


Puoi sempre fare echo "" .

per esempio

echo "Hello"
echo ""
echo "World"

Questo funziona per me in raspbian,

echo -e "hello\\nworld"


Sei sicuro di essere in balia? Funziona per me, in tutti e tre i modi:

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

Un'altra voce qui per coloro che non hanno funzionato con una di queste soluzioni e hanno bisogno di ottenere un valore di ritorno dalla loro funzione:

function foo()
{
    local v="Dimi";
    local s="";
    .....
    s+="Some message here $v $1\n"
    .....
    echo $s
}

r=$(foo "my message");
echo -e $r;

Solo questo trucco ha funzionato in una linux su cui stavo lavorando con questa bash:

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

Spero che aiuti qualcuno con problemi simili.


echo $'hello\nworld'

stampe

hello
world

$'' stringhe usano ANSI C che citano :

Le parole della forma $' string ' sono trattate in modo speciale. La parola si espande in stringa , sostituendo i caratteri con escape backslash come specificato dallo standard ANSI C.


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




newline