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

Shell script echo nieuwe regel naar bestand

Ik wil een nieuwe regel echoën naar een bestand tussen variabelen in een shell script. Hier is mijn code:

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

Op dit moment, als ik mijn script uitvoer, laat het bestand user.txt het volgende zien:

Hello World!

Ik wil dat het laat zien:

Hello World!

Hoe doe ik dat?

EDIT: Hier is mijn shellscript:

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"

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

Uitleg:

De escape-sequentie \n geeft een line feed aan. Door het argument -e aan echo mee te geven, kunnen escape-sequenties worden geïnterpreteerd.

Het kan zelfs nog verder vereenvoudigd worden:

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

of zelfs:

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

of eigenlijk heb je geen vars nodig:

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

er is een probleem met john t antwoord: als een van de vars de string \n had (of een andere sequentie zoals \t) zullen ze vertaald worden. men kan iets krijgen dat lijkt op zijn antwoord met printf:

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

ook hmm. ik zie dat je het antwoord samenstelt in een variabele $logwrite. als dit het enige gebruik is van deze variabele, lijkt het zinloos.

Ik denk dat een hier-doc beter leesbaar is, vooral als je veel regels aan het logboek moet toevoegen:

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

(dit woord, EOF, is een scheidingsteken dat je kunt kiezen. het kan elk woord zijn).

let op dat de heredoc $variabelen uitbreidt, net als dubbele aanhalingstekens. Als je dit niet wilt, kun je de heredoc citeren, zoals <<“EOF”