次のような複数行の文字列があります (引用符を含む)。
abc'asdf"
$(dont-execute-this)
foo"bar"''
Bash のヒアドキュメントを使用して変数に割り当てるにはどうすればよいですか?
改行を保持する必要があります。
文字列内の文字をエスケープしたくありません。それは面倒です...
ベストアンサー1
次のようにすると、無駄な引用符の使用を避けcat
、一致しない引用符をより適切に処理できます。
$ read -r -d '' VAR <<'EOF'
abc'asdf"
$(dont-execute-this)
foo"bar"''
EOF
変数をエコーするときに引用符で囲まないと、改行は失われます。引用符で囲むと改行は保持されます。
$ echo "$VAR"
abc'asdf"
$(dont-execute-this)
foo"bar"''
ソース コードを読みやすくするためにインデントを使用する場合は、小なり記号の後にダッシュを使用します。インデントはタブのみを使用して行う必要があります (スペースは使用しないでください)。
$ read -r -d '' VAR <<-'EOF'
abc'asdf"
$(dont-execute-this)
foo"bar"''
EOF
$ echo "$VAR"
abc'asdf"
$(dont-execute-this)
foo"bar"''
代わりに、結果の変数の内容にタブを保持する場合は、 からタブを削除する必要がありますIFS
。ヒアドキュメント ( ) の終端マーカーは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 Tab。エディターを使用している場合は、エディターの種類に応じて、この方法も機能する場合があります。または、タブをスペースに自動的に変換する機能をオフにする必要がある場合もあります。