I have a sample input file called in with the following contents:
m@m-X555LJ:~/wtfdir$ cat in
asdf1 jkl1
asdf2 jkl2
asdf3 jkl3
I now execute:
m@m-X555LJ:~/wtfdir$ mapfile < ./in
As expected, the variable MAPFILE is now an array that breaks the file in into lines:
m@m-X555LJ:~/wtfdir$ echo ${MAPFILE[0]}
asdf1 jkl1
m@m-X555LJ:~/wtfdir$ echo ${MAPFILE[1]}
asdf2 jkl2
So now I want to break the first line into words. AFAIK read -a arrname reads a line from standard input, breaks it into words and stores the result in an array called arrname. So I type:
m@m-X555LJ:~/wtfdir$ echo ${MAPFILE[0]} | read -a words
In my mental model, this is what should happen: echo ${MAPFILE[0]} echoes the first row of MAPFILE (that is, asdf1 jkl1) into standard output, but this is piped into standard input of read -a words, so read should read this line and split it into words and store the result in an array called words.
Yet sadly, this doesn't happen:
m@m-X555LJ:~/wtfdir$ echo ${words[0]}
m@m-X555LJ:~/wtfdir$
Yep. echo ${words[0]} prints nothing, while I was hoping it would print asdf1.
Why does it happen? And where is my mistake? And how to make it work?