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

Shell script echo nieuwe regel naar bestand

Advertisement

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"
Advertisement
Advertisement

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”

Advertisement

Gerelateerde vragen

6
10
11
37
16
Advertisement
Advertisement