Indenting bourne shell here documents

The Bourne shell provides here documents to allow block of data to be passed to a process through STDIN. The typical format for a here document is something similar to this:

data to pass 1
data to pass 2

This will send the data between the ARBITRARY_TAG statements to the standard input of the process. In order for this to work, you need to make sure that the data is not indented. If you indent it for readability, you will get a syntax error similar to the following:

./test: line 12: syntax error: unexpected end of file

To allow your here documents to be indented, you can append a “-” to the end of the redirection strings like so:

if [ "${STRING}" = "SOMETHING" ]
somecommand <<-EOF
this is a string1
this is a string2
this is a string3

You will need to use tabs to indent the data, but that is a small price to pay for added readability. Nice!

This article was posted by Matty on 2009-05-26 10:03:00 -0400 -0400