Posted at

ヒアドキュメントの変数エスケープ

More than 5 years have passed since last update.

みなさんはcatコマンドを利用してテキストファイルに複数行の文字列を出力することはありますか

例えばexample.txtという空ファイルに

1234

aaaa

bbbb

という内容を記述したい場合、

$echo "1234" >> example.txt

$echo "aaaa" >> example.txt
$echo "bbbb" >> example.txt

のように記述するのもありですが行毎にコマンドを入力するのは面倒です。

そこでcatコマンド+ヒアドキュメントを利用すると

$cat << EOF > example.txt

1234
aaaa
bbbb
EOF

のように記述することが出来ます。

しかし、ヒアドキュメントは変数も認識するのでエスケープしてやらないと

${}ような文字列を含んだ場合はエラーが発生します。

$cat << EOF > example.txtのcat << EOF部分を

cat <<'EOF' とか cat <<\EOF とか cat <<"EOF" とかに変更してやると

ヒアドキュメント内のメタ文字はエスケープされます。

あまり利用しない方法かと思いますが、スクリプトでガーッとやりたい時につまづいた方の役に立てればと。