2011-07-22 20:18:22 +0000 2011-07-22 20:18:22 +0000
25
25

Shell script echo nuova linea al file

Voglio fare l'echo di una nuova linea in un file tra le variabili in uno script di shell. Ecco il mio codice:

var1="Hello" var2="World!" logwrite="$var1 [Here's where I want to insert a new line] $var2 echo "$logwrite" \>\> /Users/username/Desktop/user.txt

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

Hello World!

Voglio che mostri:

Hello World!

Come faccio?

EDIT: Ecco il mio script di shell:

echo -n "What is your first name? " read first echo -n "What is your last name? " read last echo -n "What is your middle name? " read middle echo -n "What is your birthday? " read birthday echo -e "First Name: $first /nLast Name: $last /nMiddle Name: $middle /nBirthday: $birthday" \>\> /Users/matthewdavies/Desktop/user.txt qlmanage -p "~/Desktop/user.txt"

Risposte (2)

32
32
32
2011-07-22 20:20:04 +0000
var1="Hello"
var2="World!"
logwrite="$var1\n$var2"
echo -e "$logwrite" >> /Users/username/Desktop/user.txt

Spiegazione:

La sequenza di escape \n indica un line feed. Passare l'argomento -e a echo permette di interpretare le sequenze di escape.

Si può anche semplificare ulteriormente:

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
5
5
5
2011-07-22 20:35:53 +0000
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 vars:

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

c'è un problema con la risposta di john t: se una qualsiasi delle vars avesse la stringa \n (o qualche altra sequenza come \t) verrebbe tradotta. si può ottenere qualcosa di simile alla sua risposta con printf:

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

anche hmm. vedo che sta componendo la risposta in una variabile $logwrite. se questo è l'unico uso di questa variabile, sembra inutile.

Penso che un here-doc potrebbe essere più leggibile, specialmente se hai molte linee da aggiungere al log:

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'heredoc espanderà $variabili, come le doppie virgolette. se non volete questo, citate l'heredoc, come <<“EOF”