When shell encounters the syntax << 'delimiter' or << "delimiter", it starts creating a multi-line buffer using these rules:
<< 'delimiter'
<< "delimiter"
A line containing exactly delimiter ends the contents
delimiter
Escape sequences are not expanded (e.g., \t is not translated into a literal TAB)
\t
TAB
Variables are not expanded (e.g., $foo remains $foo)
$foo
Command substitutions are not performed (e.g., $(date) and `date` remain unchanged)
$(date)
`date`
The buffer created is sent as stdin to the program of your choice. For example:
stdin
1 #!/bin/sh 2 cat << 'EOF' 3 $bird $(is) `\t\h\e` ${word} 4 EOF
Produces:
$bird $(is) `\t\h\e` ${word}
Last updated 6 years ago