bash 関数内で heredoc を使用するにはどうすればよいでしょうか?

bash 関数内で heredoc を使用するにはどうすればよいでしょうか?

挿入することは可能ですか?ヒアドキュメントbash 関数内では?

以下の単純なサンプルではエラーが発生します。./heredoc_in_function.sh: 10: Syntax error: end of file unexpected (expecting "}")

#!/bin/sh

my_function () {
cat <<HEREDOC
heredoc contents
HEREDOC
}

my_function

環境:

  • Ubuntu 11.04 (GNU/Linux 2.6.38-8-サーバー x86_64)
  • GNU bash、バージョン 4.2.8(1) リリース (x86_64-pc-linux-gnu)

答え1

あなたのコードは私には問題ないように見えたので、行ごとにコピーして、次のように動作しました:

  • OSX 10.7、bash 3.2.48(1)リリース(x86_64-apple-darwin11)。
  • Ubuntu 10.04.3、bash 4.1.5(1) リリース (x86_64-pc-linux-gnu)

スペースやタブなどが抜けていたり追加されていないか確認するために、ファイルを手動で再入力することは可能ですか?

また、どのように実行していますか?私は、chmod +x test.shそして./test.sh

編集: HEREDOC を閉じる行の先頭にスペースを追加したときに、あなたと同じエラーが発生しました。

さらに注意: 終了文字の後ろにスペースがあると、HEREDOCこの現象が発生することがあります。

関連情報