余分なスペースを含む複数行の文字列(インデントを保持) 質問する

余分なスペースを含む複数行の文字列(インデントを保持) 質問する

次のような定義済みテキストをファイルに書き込みます。

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

この目的にはヒアドキュメントの方が便利そうです。これは、 excatのようなコマンドインタープリタプログラムに複数のコマンドを送信するために使用されます。

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

ただし、コード内のインデントにはスペースではなくタブを使用する必要があります。

おすすめ記事