Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What's the difference between "here string" and echo + pipe

Tags:

bash

heredoc

pipe

Wondering what is the right use of here-string (here-document) and pipe.

For example,

a='a,b,c,d'
echo $a | IFS=',' read -ra x
IFS=',' read -ra x <<< $a

Both methods work. Then what would be the difference between the two functionality?

Another problem that I have about "read" is that:

IFS=',' read x1 x2 x3 x4 <<< $a

does not work, x1 is valued as "a b c d", and x2, x3, x4 has no value

but if:

IFS=',' read x1 x2 x3 x4 <<< "$a"

I can get x1=a, x2=b, x3=c, x4=d Everything is okay!

Can anyone explain this?

Thanks in advance

like image 942
dragonxlwang Avatar asked Aug 08 '13 01:08

dragonxlwang


People also ask

What is a here string?

A here string can be considered as a stripped-down form of a here document. It consists of nothing more than COMMAND <<< $WORD, where $WORD is expanded and fed to the stdin of COMMAND. As a simple example, consider this alternative to the echo-grep construction.

What is a here document illustrate how here documents are used?

Here document (Heredoc) is an input or file stream literal that is treated as a special block of code. This block of code will be passed to a command for processing. Heredoc originates in UNIX shells and can be found in popular Linux shells like sh, tcsh, ksh, bash, zsh, csh.


1 Answers

In the pipeline, two new processes are created: one for a shell to execute the echo command, and one for a shell to execute the read command. Since both subshells exit after they complete, the x variable is not available after the pipeline completes. (In bash 4, the lastpipe option was introduced to allow the last command in a pipeline to execute in the current shell, not a subshell, alleviating the problem with such pipelines).

In the second example, no extra process is need for the here string (a special type of here document that consists of a single line), so the value of x is in fact set in the current shell, making it available for use later in the script/session.

like image 52
chepner Avatar answered Sep 20 '22 21:09

chepner