次のような定義済みテキストをファイルに書き込みます。
text="this is line one\n
this is line two\n
this is line three"
echo -e $text > filename
私は次のようなものを期待しています:
this is line one
this is line two
this is line three
しかし、これを入手しました:
this is line one
this is line two
this is line three
それぞれの後にスペースがないことは確かです\n
が、余分なスペースはどのようにして出てくるのでしょうか?
ベストアンサー1
この目的にはヒアドキュメントの方が便利そうです。これは、 exやcatのようなコマンドインタープリタプログラムに複数のコマンドを送信するために使用されます。
cat << EndOfMessage
This is line 1.
This is line 2.
Line 3.
EndOfMessage
後の文字列は<<
停止する場所を示します。
これらの行をファイルに送信するには、次を使用します。
cat > $FILE <<- EOM
Line 1.
Line 2.
EOM
これらの行を変数に保存することもできます。
read -r -d '' VAR << EOM
This is line 1.
This is line 2.
Line 3.
EOM
これにより、行が という名前の変数に格納されますVAR
。
印刷するときは、変数を引用符で囲むことを忘れないでください。そうしないと、改行文字が表示されません。
echo "$VAR"
さらに良いことに、インデントを使用してコード内で目立たせることができます。今回は、タブが表示されないように-
afterを追加するだけです。<<
read -r -d '' VAR <<- EOM
This is line 1.
This is line 2.
Line 3.
EOM
ただし、コード内のインデントにはスペースではなくタブを使用する必要があります。