Reading multiple lines in bash without spawning a new subshell?

bash

Solution

If you really are doing something that simplistic, you don't even need the `while read` loop. The following would work:

VAR=0
grep "foo" bar && VAR=1
# ...

If you really do need the loop, because other things are happening in the loop, you can redirect from a `<( commands )` process substitution:

VAR=0
while read line ; do
    VAR=1
    # do other stuff
done <  <(grep "foo" bar)

Problem

I'm trying to do something like ``` var=0 grep "foo" bar | while read line; do var=1 done ``` Unfortunately this doesn't work since the pipe causes the while to run in a subshell. Is there a better way to do this? I don't need to use "read" if there's another solution. I've looked at Bash variable scope which is similar, but I couldn't get anything that worked from it.

Original source

Related problems