Explaining heredocs in Bash — combined with stream redirection.
The aim of this page📝 is to explain initial confusion. Misunderstandings, when learning about heredocs simultaneously with stream redirection. Let’s look at a simple example of using a here document with the cat
command to write to a file.
3 min readMar 21, 2024
cat > remrem.md << EOT
hello
world
EOT
This command creates a file named remrem.md
with the contents hello
and world
written on separate lines.
- Stream redirection operators in shell scripting, such as
<
,>
,>>
, and|
, are used to manipulate input and output streams. - Stream redirection operators are executed in the left-to-right order.
- The
<<
operator, used in the example, is not considered a stream redirection operator; it is used to create a here document. - More on heredocs: https://medium.com/p/b64337f87bfc
- More on redirection: https://medium.com/p/7e77ccb39a3f
- In the provided example, the
<< EOT
here document marker indicates the start of the here document. - The lines
hello
andworld
following the here document marker are the input for thecat
command. - The output of the
cat
command, including the input lines, is redirected to the fileremrem.md
using the>
operator. - The here document redirection (
<< EOT
) takes precedence over the output redirection (> remrem.md
) in this example. - Placing the here document marker at the rightmost part of the command can be counterintuitive for those (like me) expecting a strict left-to-right structure.
- The here document structure helps provide multiple lines of input to a command in a clear and readable manner.
ANKI
Question:
What does the `<<` operator do in shell scripting?
Answer:
The `<<` operator is used to create a here document in shell scripting.
Question:
What does the provided command `cat > remrem.md << EOT` achieve?
Answer:
This command creates a file named `remrem.md` with the contents `hello` and `world` written on separate lines.
Question:
Are here documents considered stream redirection operators in shell scripting?
Answer:
No, the `<<` operator used for here documents is not considered a stream redirection operator.
Question:
What is the order of processing stream redirection operators in shell scripting?
Answer:
Stream redirection operators are processed from left to right in shell scripting.
Question:
Why might the placement of the here document marker at the rightmost part of the command be counterintuitive?
Answer:
It can be counterintuitive for those expecting a strict left-to-right structure in command execution.
Question:
How can the here document structure help in shell scripting?
Answer:
The here document structure helps provide multiple lines of input to a command in a clear and readable manner.
Question:
What does the `>` operator do in shell scripting?
Answer:
The `>` operator is used for output redirection in shell scripting.
Question:
What does the `cat` command do in the provided example?
Answer:
The `cat` command reads input lines from the here document and writes them to the file `remrem.md`.
Question:
Why is understanding the order of stream redirection operators and here documents important in shell scripting?
Answer:
Understanding the order is essential for effectively manipulating input and output streams in shell scripts.
Question:
How can practicing with examples like the one provided enhance comprehension of shell scripting concepts?
Answer:
Practicing with examples can improve understanding of stream redirection and here documents in shell scripting.