【问题标题】:Reading multiple lines in bash without spawning a new subshell?在bash中读取多行而不产生新的子shell?
【发布时间】:2011-01-23 11:29:26
【问题描述】:

我正在尝试做类似的事情

var=0  
grep "foo" bar | while read line; do  
   var=1  
done

不幸的是,这不起作用,因为管道会导致 while 在子 shell 中运行。有一个更好的方法吗?如果有其他解决方案,我不需要使用“阅读”。

我查看了类似的Bash variable scope,但我无法从中获得任何有用的信息。

【问题讨论】:

标签: bash


【解决方案1】:

如果你真的在做一些简单的事情,你甚至不需要while read 循环。以下将起作用:

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

如果您确实需要循环,因为循环中正在发生其他事情,您可以从 <( commands ) 进程替换重定向:

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

【讨论】:

【解决方案2】:

然后不要使用管道,并丢失 grep

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    • 2013-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多