1. ホーム
  2. バッシュ

[解決済み】Bashでheredoc値を変数に代入する方法は?

2022-03-24 21:53:24

質問

次のような複数行の文字列があります(引用符を含む)。

abc'asdf"
$(dont-execute-this)
foo"bar"''

Bashでheredocを使って変数に代入するにはどうしたらいいでしょうか?

改行を維持したいのですが。

文字列の中の文字をエスケープしたくない、迷惑だ...。

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

の無駄な使用を避けることができます。 cat で、不一致の引用符をうまく処理することができます。

$ read -r -d '' VAR <<'EOF'
abc'asdf"
$(dont-execute-this)
foo"bar"''
EOF

echoするときに変数を引用しないと、改行が失われます。クォートすることで改行が保たれます。

$ echo "$VAR"
abc'asdf"
$(dont-execute-this)
foo"bar"''

ソースコードの可読性を高めるためにインデントを使用する場合は、less-thansの後にダッシュを使用します。インデントはタブのみ(スペースなし)で行う必要があります。

$ read -r -d '' VAR <<-'EOF'
    abc'asdf"
    $(dont-execute-this)
    foo"bar"''
    EOF
$ echo "$VAR"
abc'asdf"
$(dont-execute-this)
foo"bar"''

代わりに、結果の変数の内容にタブを残したい場合は、タブを IFS . ここでのdocのターミナルマーカー( EOF ) はインデントしてはいけません。

$ IFS='' read -r -d '' VAR <<'EOF'
    abc'asdf"
    $(dont-execute-this)
    foo"bar"''
EOF
$ echo "$VAR"
    abc'asdf"
    $(dont-execute-this)
    foo"bar"''

コマンドラインでタブを挿入する場合は Ctrl - V タブ . エディタを使っている場合、エディタによっては、これも使えるかもしれませんし、タブを自動的にスペースに変換する機能をオフにする必要があるかもしれません。