ショコラ
catコマンドのヒアドキュメントで変数を展開しないようにするには?
「cat <<‘EOS’」のようにシングルクォートで 終端ID を括ってキメマス。
面倒だけど$、`等をエスケープする方法があります。
もっさん先輩
①ヒアドキュメント(出力内容)の変数を展開しないでファイルに保存する方法
cat <<'EOS' > {ファイル名}
{出力内容}
EOF
EOS をシングルクォートで囲って、$変数 を展開させないでファイルに保存します
cat <<'EOS' > hello.php
<?php
while ($str = fgets(STDIN))
echo 'Hello ',$str;
EOS
因みにプログラムの実行結果は↓のようになります。
# php hello.php <<EOT
> mossan
> chocolat
> EOT
Hello mossan
Hello chocolat
② 終端ID をシングルクォートで括らないで、$、`等の前に¥マークを付けてエスケープする方法
cat <<EOS > hello.php
<?php
while (\$str = fgets(STDIN))
echo \`echo Hello,\$str\`;
EOS
逆にシングルクォート内のヒアドキュメントで、sed を使って変数を置換する方法です。
cat <<'EOS' | sed -e 's/\$NAME1/mossan/' -e 's/\$NAME2/chocolat/'
echo '$NAME1'
echo '$NAME2'
EOS
逆にシングルクォート内のヒアドキュメントで、envsubst を使って変数を環境変数で置換する方法です。
cat <<'EOS' | envsubst '$$NAME1 $$NAME2'
echo '$NAME1'
echo '$NAME2'
EOS