What does <<< mean? Here is an example:
$ sed 's/a/b/g' <<< "aaa" bbb
Is it something general that works with more Linux commands?
It looks like it’s feeding the sed program with the string aaa, but isn’t << or < usually used for that?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
Others have answered the basic question: what is it?
Let’s look at why it’s useful.
You can also feed a string to a command’s stdin like this:
echo "$string" | command
However in bash, introducing a pipe means the individual commands are run in subshells. Consider this:
echo "hello world" | read first second echo $second $first
The output of the 2nd echo command prints just a single space. Whaaaa? What happened to my variables? Because the read command is in a pipeline, it is run in a subshell. It correctly reads 2 words from its stdin and assigns to the variables. But then the command completes, the subshell exits and the variables are lost.
Sometimes you can work around this with braces:
echo "hello world" | {
read first second
echo $second $first
}
That’s OK if your need for the values is contained, but you still don’t have those variables in the current shell of your script.
To remedy this confusing situation, use a here-string
read first second <<< "hello world" echo $second $first
Ah, much better!
Method 2
<<< denotes a here string.
$ cat <<< 'hi there' hi there
It passes the word on the right to the standard input of the command on the left.
<< denotes a here document.
$ cat <<EOF > hi > there > EOF hi there
EOF can be any word.
Here documents are commonly used in shell scripts to create whole files or to display long messages.
cat > some-file <<FILE foo bar bar bar foo foo FILE
< passes the contents of a file to a command’s standard input.
$ cat < /etc/fstab /dev/sda2 /boot ext4 nosuid,noexec,nodev,rw,noatime,nodiratime 0 2 /dev/sda4 / ext4 rw,noatime,nodiratime, 0 1 /dev/sdb5 /var ext4 nosuid,noexec,nodev,rw,relatime 0 2 ...
Method 3
Take a look at the Bash man page. This notation is part of what’s called a here documents & here strings. It allows you the ability to generate multi-line data input as one continuous string. The variation you’re asking about is called a here string.
excerpt from Bash man page
Here Strings
A variant of here documents, the format is:
<<<word
The word is expanded and supplied to the command on its standard input.
Method 4
It means here strings.
<<< strings
The strings is expanded and supplied to the command on its standard input.
In your example, strings aaa is feed to sed command via stdin.
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0