I'm trying to pipe some data from a Bash pipe into a Bash variable using the read command, like this:

$ echo "Alexander the Grape" | read quot
$ echo $quot
$ 

But quot is empty. Some Googling revealed that this is not a bug; it's an intended feature of Bash. (Section E5 in the FAQ.)

But when I tried the same thing in zsh, it worked. (Ditto for ksh.) Is there any way to make this work in Bash? I really don't want to have to type:

$ quot=$(echo "Alexander the Grape")

Especially for long commands.

link|improve this question
feedback

3 Answers

up vote 1 down vote accepted

For additional reading on this subject, see BashFAQ/024.

There are a bunch of ways to do variable assignments in Bash:

var=$(command)
read var <<< $(command)
read var <<< EOF
$(command)
EOF
printf -v var "%s" $(command)

etc.

link|improve this answer
Thanks. Not what I was looking for, but these are very interesting alternatives. – Karthik Aug 10 '10 at 3:03
feedback

I am guessing you are trying to create a command inside a variable and then run it by specifying the variable? Then don't. run the command as it is.

link|improve this answer
Actually, I'm parsing really large numbers (1000+ digits). I wanted to store it into a variable because it got unwieldy after a while. – Karthik Aug 10 '10 at 2:27
feedback

Nope. If you prefer the behaviour of a different shell, switch to that shell. Market forces. :)

link|improve this answer
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.