About
Language - Here Document in Bash.
Here document in Bash is implemented through redirection. A redirection instructs the shell to read input from the current source until a line containing only word (with no trailing blanks) is seen. All of the lines read up to that point are then used as the standard input for a command.
Example
FirstWorldDelimiter not quoted
foo="foo"
cat <<-HereDoc
my Variable is $foo
HereDoc
my Variable is foo
FirstWorldDelimiter quoted
foo="foo"
cat <<-"HereDoc"
my Variable is $foo
HereDoc
my Variable is $foo
Setting a variable
- With read
read -r -d '' MY_VARIABLE << 'EOF'
Content
With
Multiple Line
EOF
- With Cat
MY_VARIABLE=$(cat << 'EOF'
Content
With
Multiple Line
EOF
)
Note that you can also create a multiline value with just the quote syntax
MY_VARIABLE="Line 1
Line 2
Indented line
Line with \$variables and \"quotes\""
Format
The format of here-documents is:
<<[-]wordDelimiter
here-document
wordDelimiter
where:
- « is the redirection operator
- - (optional) is used then all leading tab characters are stripped from input lines and the line containing delimiter. This allows here-documents within shell scripts to be indented in a natural fashion.
- wordDelimiter and wordDelimiter delimit the content of the here-document
Bash variant: The word is expanded and supplied to the command on its standard input.
<<< word
first WordDelimiter
No:
is performed on the first WordDelimiter.
Quoted
If the first wordDelimiter is:
- quoted, the lines in the here-document are not expanded.
- unquoted, all lines of the here-document are subjected to :
- and arithmetic expansion.
In the latter case, the character sequence \<newline> is ignored, and \ must be used to quote the characters \, $, and ‘.
second WorldDelimiter
The second WorldDelimiter is generally the result of quote removal on the first WordDelimiter.