シェルスクリプトでヒアドキュメントを利用した場合、変数が展開されて出力されてしまいます。
バックスラッシュによるエスケープを使用せずにヒアドキュメント内の変数を展開しない方法を以下に記します。
尚、以下のスクリプトはbashでテストしました。
ヒアドキュメントの開始を示すキーワード(以下の例ではEOT)をシングルクオートまたはダブルクオートで囲むだけです。
実際に以下のサンプルコードでは'EOT'と"EOT"で動作確認をとりました。
#!/bin/bash MSG1="HELLO WORLD.(test1)" MSG2="HELLO WORLD.(test2)" MSG3="HELLO WORLD.(test3)" echo "here document test 1." cat << EOT <HTML> <BODY> $MSG1 </BODY> </HTML> EOT echo "here document test 2." cat << 'EOT' <html> <body> $MSG2 </body> </html> EOT echo "here document test 3." cat << "EOT" <html> <body> $MSG3 </body> </html> EOT
以下のスクリーンショットは上記サンプルコードを実行した結果です。
ヒアドキュメントで変数展開がされていないのが確認できます。