2017-04-12 1 views
0

私はforループを持っているので、項目のリストを反復して統計を集めています。作成された文字列は、mailコマンドを使用して電子メールの本文として送信されます。私の質問は:スクリプトが現在やっているようにエスケープされた\ n文字ではなく、改行を出力する正しい方法は何ですか?Bash - コマンド置換でループ内の文字列に改行を追加する方法は?

ここでのrelaventのbashコードです:

for x in $([..]); do 
    BODY="${BODY}\nReport for ${x}: \nSuccess: `get_logs $x 1`\nAttempts: `get_logs $x`" 
done; 
+0

をエスケープあなたはこれを追加dex'ter @ 'エコー-e' –

+0

を試すことができますができますそれは働いたので答えとして。あなたとソコウィはupvotesのために戦うことができます:D –

+0

done。私はそれに答えを加えました –

答えて

0

私がコメントで言ったように、あなたが使用することができます。

echo -e 

-eフラグは、バックスラッシュの解釈は

0

はあなたが引用符で囲まれた文字列内の改行を使用することができ、これの唯一の欠点は、インデントが文字列の一部となりますので、あなたは、新しい行をインデントすることができないということです。

for x in $([..]); do 
    BODY="${BODY} 
Report for ${x}: 
Success: $(get_logs $x 1) 
Attempts: $(get_logs $x)" 
done; 

また、コードを読みやすくするために、それぞれの行を別々に追加してください。

for x in $([..]); do 
    BODY+="Report for ${x}:"$'\n' 
    BODY+="Success: $(get_logs $x 1)"$'\n' 
    BODY+="Attempts: $(get_logs $x)"$'\n' 
done; 

$'\n' ANSI C文字列であり、改行によって置き換えられます。

関連する問題