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

シェルスクリプト echo new line to file

シェルスクリプトの変数の間にあるファイルへの改行をエコーしたい。以下は私のコードです。

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

今、スクリプトを実行すると、user.txt ファイルに以下のように表示されます。

Hello World!

と表示されます。

Hello World!

と表示させたいのですが、どうすればいいですか?

EDIT: 以下は私のシェルスクリプトです。

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"
``` 0x1&

回答 (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

説明:

\n エスケープシーケンスは改行を示します。引数 -e を echo に渡すことで、エスケープシーケンスの解釈が可能になります。

さらに単純化してもよい。

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

さらに単純化して、

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

あるいは、実際にはvarsは必要ありません。

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

john tの答えに問題があります: varsのどれかが\n文字列(または\tのような他のシーケンス)を持っている場合、それらは翻訳されます。

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

また、うーん。あなたが答えを変数$logwriteにまとめているのが見えます。

私は、特にログに追加する行数が多い場合には、heere-docの方が読みやすいと思います。

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

(このEOFという単語は任意の区切り文字です。)

ヘレドクは二重引用符のように$variablesを展開するので注意してください。