开发者

Reading multiple lines in bash without spawning a new subshell?

开发者 https://www.devze.com 2022-12-21 17:48 出处:网络
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

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 Bas开发者_Go百科h variable scope which is similar, but I couldn't get anything that worked from it.


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)


then don't use pipe ,and lose the grep

var=1
while read line
do  
   case "$line" in
    *foo* ) var=1
   esac   
done <"file"
echo "var after: $var"
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号