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

Shell-Skript echo new line to file

Ich möchte in einem Shell-Skript zwischen Variablen eine neue Zeile in eine Datei ausgeben. Hier ist mein 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

Im Moment, wenn ich mein Skript ausführe, zeigt die Datei user.txt folgendes an:

Hello World!

Ich möchte, dass sie Folgendes anzeigt:

Hello World!

Wie kann ich das machen?

EDIT: Hier ist mein Shell-Skript:

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"

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

Erläuterung:

Die Escape-Sequenz \n zeigt einen Zeilenvorschub an. Die Übergabe des Arguments -e an echo ermöglicht die Interpretation von Escape-Sequenzen.

Es kann sogar noch weiter vereinfacht werden:

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

oder sogar:

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

oder eigentlich braucht man keine vars:

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

es gibt ein problem mit john ts antwort: wenn irgendeine der vars die zeichenkette \n (oder eine andere sequenz wie \t) hätte, würden sie übersetzt werden. man kann etwas ähnliches wie seine antwort mit printf erhalten:

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

auch hmm. ich sehe, dass Sie die Antwort in eine Variable $logwrite zusammensetzen. wenn dies die einzige Verwendung dieser Variable ist, scheint es sinnlos.

Ich denke, ein here-doc könnte besser lesbar sein, besonders wenn Sie viele Zeilen an das Log anhängen müssen:

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

(dieses Wort, EOF, ist ein frei wählbares Begrenzungszeichen, es kann ein beliebiges Wort sein).

achten Sie darauf, dass der heredoc $variablen expandiert, wie doppelte Anführungszeichen. wenn Sie das nicht wollen, setzen Sie den heredoc in Anführungszeichen, wie z.B. <<“EOF”