web-dev-qa-db-ja.com

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

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

 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/n誕生日:$ birthday ">> /Users/matthewdavies/Desktop/user.txt
qlmanage -p"〜/ Desktop/user。 txt"
28
daviesgeek
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
35
John T
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

ジョンtの回答に問題があります。varのいずれかに\ n文字列(または\ tのような他のシーケンス)があった場合、それらは翻訳されます。 printfで彼の答えに似たものが得られます。

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

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

ヒアドキュメントは、ログに追加する行が多い場合は特に、より読みやすくなると思います。

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

(このWord、EOFは、選択できる区切り文字です。任意のWordにすることができます)。

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

5
elias