catコマンドのヒアドキュメントで変数を展開しないようにするには?

ショコラ
ショコラ

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
Scroll to Top