Lo script Shell fa eco alla nuova riga nel file


26

Voglio fare eco a una nuova riga in un file tra le variabili in uno script di shell. Ecco il mio codice:

var1 = "Ciao"
var2 = "World!"
logwrite = "$ var1 [Ecco dove voglio inserire una nuova riga] $ var2
echo "$ logwrite" >> /Users/username/Desktop/user.txt

In questo momento, quando eseguo il mio script, il file user.txt mostra questo:

Ciao mondo!

Voglio che mostri:

Ciao
Mondo!

Come faccio a fare questo??

EDIT: Ecco il mio script shell:

echo -n "Qual è il tuo nome di battesimo?"
leggi prima
echo -n "Qual è il tuo cognome?"
leggi per ultimo
echo -n "Qual è il tuo secondo nome?"
leggi in mezzo
echo -n "Qual è il tuo compleanno?"
leggi il compleanno
echo -e "Nome: $ first / nUltimo nome: $ last / nNome medio: $ middle / nBirthday: $ birthday" >> /Users/matthewdavies/Desktop/user.txt
qlmanage -p "~ / Desktop / user.txt"

1
DEVI creare questa variabile "logwrite"? Sai scrivere printf "%s\n" $var1 $var2 >> file?
Glenn Jackman,

No, non ho bisogno e nel mio script rivisto su cui sto lavorando, non uso la variabile $ logwrite. Grazie.
daviesgeek,

Risposte:


32
var1="Hello"
var2="World!"
logwrite="$var1\n$var2"
echo -e "$logwrite"  >> /Users/username/Desktop/user.txt

Spiegazione:

La \nsequenza di escape indica un avanzamento riga. Passare l' -eargomento all'eco consente l'interpretazione delle sequenze di escape.

Potrebbe anche essere ulteriormente semplificato:

var1="Hello"
var2="World!"
echo -e "$var1\n$var2"  >> /Users/username/Desktop/user.txt

o anche:

echo -e "Hello\nWorld! "  >> /Users/username/Desktop/user.txt

Il tuo esempio funziona, ma quando lo incorporo nel mio codice, non funziona. Modificherò il mio post e aggiungerò il mio script in esso.
daviesgeek,

1
@dave sembra che tu stia usando la barra sbagliata con la sequenza di escape. \ninvece di /nfare il trucco :)
John T

Ciò lo risolve (usando \ n invece di / n. Grazie mille !!
daviesgeek,

@dave sei più che benvenuto :)
John T

su AIX nello script KSH non avevo bisogno del -eflag.
javaPlease42,

5
var1='Hello'
var2='World!'
echo "$var1" >> /Users/username/Desktop/user.txt
echo "$var2" >> /Users/username/Desktop/user.txt

o in realtà non hai bisogno di var:

echo 'Hello' >> /Users/username/Desktop/user.txt
echo 'World!' >> /Users/username/Desktop/user.txt

c'è un problema con la risposta di john t: se qualcuno dei var aveva la stringa \ n (o qualche altra sequenza come \ t) verrebbero tradotti. si può ottenere qualcosa di simile alla sua risposta con printf:

printf '%s\n%s\n' 'Hello' 'World!'

anche hmm. vedo che stai componendo la risposta in una variabile $ logwrite. se questo è il solo uso di questa variabile, sembra inutile.

Penso che un documento qui potrebbe essere più leggibile, specialmente se hai molte righe da aggiungere al registro:

cat >> /Users/username/Desktop/user.txt <<EOF
Hello
World
EOF

(questa parola, EOF, è un delimitatore che puoi scegliere. può essere qualsiasi parola).

attenzione che l'ereditarietà espanderà $ variabili, come virgolette doppie. se non lo vuoi, citi l'eredoc, come << "EOF"


il fatto è che nessuno dei vari ha \n, quindi perché ho fornito la risposta. La metodologia "what if" porterebbe ogni domanda su questo sito in una discussione senza fine. Quando arriva su quella strada può fare un'altra domanda :)
John T

@elias la variabile $ logwrite era rimasta dalle mie modifiche sullo script mentre stavo apportando modifiche. Ho rimosso $ logwrite var dal mio codice. La risposta di John T. in realtà ha funzionato. Grazie mille!
daviesgeek,

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.