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

Script Shell ecoa nova linha a arquivar

Quero fazer eco de uma nova linha para um ficheiro entre as variáveis de 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

Neste momento, quando executo o meu script, o ficheiro user.txt mostra isto:

Hello World!

quero que seja mostrado:

Hello World!

Como é que faço isto?

EDIT: Aqui está o meu guião de concha:

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"

Respostas (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

Explicação:

A sequência de fuga \n indica uma alimentação de linha. A passagem do argumento -e para eco permite a interpretação das sequências de fuga.

Pode até ser mais simplificado:

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

ou mesmo:

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

ou na realidade não precisa de vars:

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

existe um problema com a resposta de john t: se algum dos vars tivesse a cadeia \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 está a compor a resposta numa variável $logwrite. se esta for a única utilização desta variável, parece inútil.

Penso que um aqui poderia ser mais legível, especialmente se tiver muita linha para anexar ao registo:

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

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

cuidado para que o heredoc expanda $variables, como aspas duplas. se não quiser isto, cite o heredoc, como {\i1}“EOF”.