Is it possible to insert a heredoc inside a bash function?

The trivial sample below results in an error: ./heredoc_in_function.sh: 10: Syntax error: end of file unexpected (expecting "}")


my_function () {
heredoc contents



  • Ubuntu 11.04 (GNU/Linux 2.6.38-8-server x86_64)
  • GNU bash, version 4.2.8(1)-release (x86_64-pc-linux-gnu)
  • I was under the impression that heredoc was a Perl thing. Is there any reason to believe it would work in BASH? – jdw Nov 22 '11 at 2:30
  • @jdw, here docs are present in many languages including bash. – Zoredache Nov 22 '11 at 2:55
  • I see that now. Cool. – jdw Nov 22 '11 at 13:32

Your code looked fine to me, so I copied it line for line and it worked for me on:

  • 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)

Is it possible for you to retype the file by hand just to make sure you aren't missing or adding spaces/tabs/etc?

Also, how are you executing it? I did a chmod +x test.sh and then ./test.sh

EDIT: I received the same error as you when I added a space at the beginning of the line with the closing HEREDOC.

Further Note: A trailing space behind the closing HEREDOC can also cause this

  • 1
    Weird, it works now... Vim color syntax highlighting recognized the HEREDOC before (it doesn't if you add that space before the closing HEREDOC) I modified the original script to just use an external file, so I'm not sure what was wrong. It will be much more convenient with heredocs, though! – Leftium Nov 22 '11 at 3:44
  • 1
    Indeed! I love me some heredocs. – David Nov 22 '11 at 8:16
  • 1
    Additionally: A trailing space behind the closing HEREDOC can also cause this (These kind of errors are really hard to track down. sigh.) – 0laf Apr 24 '18 at 7:43

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.