Script shell ecoa nova linha para arquivo

19

Eu quero repetir uma nova linha para um arquivo entre variáveis em um script de shell. Aqui está o meu código:

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

Agora, quando executo meu script, o arquivo user.txt mostra isso:

Hello World!

Eu quero mostrar:

Hello
World!

Como faço isso ??

EDIT: Aqui está o meu script de 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"
    
por daviesgeek 22.07.2011 / 22:18

2 respostas

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

Explicação:

A sequência de escape \n indica um avanço de linha. Passar o argumento -e para echo permite a interpretação de seqüências de escape.

Pode até ser ainda mais simplificado:

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

ou até mesmo:

echo -e "Hello\nWorld! "  >> /Users/username/Desktop/user.txt
    
por 22.07.2011 / 22:20
5
var1='Hello'
var2='World!'
echo "$var1" >> /Users/username/Desktop/user.txt
echo "$var2" >> /Users/username/Desktop/user.txt

ou, na verdade, você não precisa de vars:

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

há um problema com john t answer: se algum dos vars tiver a string \ n (ou alguma outra sequência como \ t), eles serão traduzidos. pode-se obter algo semelhante à sua resposta com printf:

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

também hmm. vejo que você está compondo a resposta em uma variável $ logwrite. se este é o único uso desta variável, parece inútil.

Acho que um aqui-doc pode ser mais legível, especialmente se você tiver muita linha para anexar ao log:

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

(esta palavra, EOF, é um delimitador que você pode escolher. pode ser qualquer palavra).

Cuidado que o heredoc irá expandir $ variáveis, como aspas duplas. se você não quiser isso, você cita o heredoc, como < < "EOF"

    
por 22.07.2011 / 22:35