Help us understand the problem. What is going on with this article?

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

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" とかに変更してやると
ヒアドキュメント内のメタ文字はエスケープされます。

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away