1. ホーム
  2. string

[解決済み] 余分なスペースを含む複数行の文字列(インデントが保持される)

2022-03-17 06:22:02

質問

以下のようなあらかじめ用意されたテキストをファイルに書き出したい。

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 しかし、余分なスペースはどのように出てくるのでしょうか?

どのように解決するのですか?

この目的には、Heredocの方が便利そうですね。のようなコマンドインタープリタプログラムに複数のコマンドを送信するのに使います。 ex または

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"

さらに良いのは、インデントを利用して、コードの中でより目立たせることです。今回は、単に - の後に << でタブを表示させないようにします。

read -r -d '' VAR <<- EOM
    This is line 1.
    This is line 2.
    Line 3.
EOM

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