O'Reilly logo

bash Cookbook by Cameron Newham, JP Vossen, Carl Albing

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Indenting Here-Documents

Problem

The here-document is great, but it's messing up your shell script's formatting. You want to be able to indent for readability.

Solution

Use <<- and then you can use tab characters (only!) at the beginning of lines to indent this portion of your shell script.

	$ cat myscript.sh
	...
	     grep $1 <<-'EOF'
	        lots of data
	        can go here
	        it's indented with tabs
	        to match the script's indenting
	        but the leading tabs are
	        discarded when read
	        EOF
	    ls
	...
	$

Discussion

The hyphen just after the << is enough to tell bash to ignore the leading tab characters. This is for tab characters only and not arbitrary white space. This is especially important with the EOF or any other marker designation. If you have spaces there, it will not recognize the EOF as your ending marker, and the "here" data will continue through to the end of the file (swallowing the rest of your script). Therefore, you may want to always left-justify the EOF (or other marker) just to be safe, and let the formatting go on this one line.

Warning

Just as trailing whitespace of any kind on your closing EOF delimiter prevents it from being recognized as the closing delimiter (see the warning in Preventing Weird Behavior in a Here-Document, "Preventing Weird Behavior in a Here-Document"), so too will using a leading character other than just the tab character. If your script indents with spaces or a combination of spaces and tabs, don't use that technique on here-documents. Either use just tabs, or keep it all flush left. ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required