シェルスクリプトはファイルに新しい行をエコーし​​ます


26

シェルスクリプト内の変数間のファイルに新しい行をエコーし​​たいです。ここに私のコードがあります:

var1 = "Hello"
var2 = "World!"
logwrite = "$ var1 [ここに新しい行を挿入します] $ var2
echo "$ logwrite" >> /Users/username/Desktop/user.txt

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

"こんにちは世界"

見せたい:

こんにちは
世界!

どうすればいいですか?

編集:ここに私のシェルスクリプトがあります:

echo -n "名前は何ですか?"
最初に読む
echo -n "姓は何ですか?"
最後に読む
echo -n "ミドルネームは何ですか?"
真ん中を読む
echo -n「あなたの誕生日は?」
誕生日を読む
echo -e "名:$ first / n名:$ last / nミドルネーム:$ middle / nBirthday:$ birthday" >> /Users/matthewdavies/Desktop/user.txt
qlmanage -p "〜/ Desktop / user.txt"

1
この「logwrite」変数を作成する必要がありますか?書けprintf "%s\n" $var1 $var2 >> fileますか?
グレンジャックマン

いいえ、作業する必要がなく、修正したスクリプトでは、$ logwrite変数を使用しません。ありがとう。
daviesgeek

回答:


32
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

あなたの例は動作しますが、コードに組み込むと動作しません。投稿を編集し、スクリプトを追加します。
daviesgeek

1
@daveエスケープシーケンスで間違ったスラッシュを使用しているようです。\n代わりに/nトリックを行う必要があります:)
ジョンT

それはそれを修正します(/ nの代わりに\ nを使用します。
どうも

@daveどういたしまして:)
ジョンT

AIXのKSHスクリプトでは、-eフラグは必要ありませんでした。
javaPlease42

5
var1='Hello'
var2='World!'
echo "$var1" >> /Users/username/Desktop/user.txt
echo "$var2" >> /Users/username/Desktop/user.txt

または、実際には変数は必要ありません:

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

john tの回答には問題があります。変数のいずれかに\ n文字列(または\ tのような他のシーケンス)がある場合、それらは変換されます。printfで彼の答えに似たものを得ることができます。

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

うーん。答えを変数$ logwriteに作成していることがわかります。これがこの変数の唯一の使用である場合、それは無意味なようです。

ログに追加する行がたくさんある場合は特に、here-docの方が読みやすいと思います。

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

(この単語EOFは、選択可能な区切り文字です。任意の単語を指定できます)。

ヒアドキュメントは二重引用符のように$ variablesを展開することに注意してください。これが必要ない場合は、<< "EOF"のように、ヒアドキュメントを引用します。


問題はvarsがどれも持っていない\nため、なぜ答えを提供したかです。「もしも​​」の方法論は、このサイト上のあらゆる質問を無限の議論に持ち込むでしょう。彼はその道に来たら、別の質問をすることができます:)
ジョンT

@elias $ logwrite変数は、スクリプトを編集して変更を加えたときに残ったものです。コードから$ logwrite変数を取り出しました。John T.の答えは実際に機能しました。本当にありがとう!
daviesgeek

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.