How do I pipe a file line by line into multiple read variables?

bash

Solution

Piping into a `read` command causes the variables to be set in a subshell, which makes them inaccessible (indeed, they are gone) to the rest of your code. In this case, though, you don't even need the `for` loop or the second `read` command:

while read -r a b; do
    echo "$a" "$b"
done < text.txt

Problem

I have a file that contains information in two columns: ``` box1 a1 box2 a2 ``` I'm trying to read this file line by line into `read` and have each line items be put into a variable. On the first pass, `$a` would contain `box1` and `$b` would contain `a1`. On the second pass, `$a` would contain `box2` and `$b` would contain `a2`, etc. An example of the code that I am using to try to achieve is this: ``` for i in text.txt; do while read line; do echo $line | read a b; done < text.txt; echo $a $b; done ``` This gives me the following results: ``` box1 a1 box2 a2 ``` When I expected the following results: ``` box1 a1 box2 a1 ``` How can I fix this?

Original source