bash関数内でheredocを使用する方法は?


12

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-server x86_64)
  • GNU bash、バージョン4.2.8(1)-release(x86_64-pc-linux-gnu)

私は、ヒアドックはPerlのものだという印象を受けていました。BASHで機能すると信じる理由はありますか?
jdw

@jdw、ここのドキュメントはbashを含む多くの言語で提供されています。
ゾレダチェ

私は今それを見る。涼しい。
jdw

回答:


10

あなたのコードは私には見栄えが良かったので、私はそれを行ごとにコピーし、それで私のために働いた:

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

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

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

編集:HEREDOCを閉じて行の先頭にスペースを追加したときに、あなたと同じエラーを受け取りました。

さらに注:クロージングの後ろに後続スペースがあると、HEREDOCこれが発生する可能性があります


1
奇妙なことに、今は機能しています... Vimカラー構文の強調表示は、以前にHEREDOCを認識していました(閉じたHEREDOCの前にそのスペースを追加した場合は認識しません)間違っていました。ただし、heredocsを使用するとさらに便利になります。
レフティウム

1
確かに!いくつかのヒアドキュメントが大好きです。
デビッド

1
さらに:クロージングの後ろの後続スペースHEREDOCもこれを引き起こす可能性があります(これらの種類のエラーを追跡するのは本当に難しいです。ため息。)
0laf
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.