【发布时间】:2011-01-23 11:29:26
【问题描述】:
我正在尝试做类似的事情
var=0
grep "foo" bar | while read line; do
var=1
done
不幸的是,这不起作用,因为管道会导致 while 在子 shell 中运行。有一个更好的方法吗?如果有其他解决方案,我不需要使用“阅读”。
我查看了类似的Bash variable scope,但我无法从中获得任何有用的信息。
【问题讨论】:
标签: bash
我正在尝试做类似的事情
var=0
grep "foo" bar | while read line; do
var=1
done
不幸的是,这不起作用,因为管道会导致 while 在子 shell 中运行。有一个更好的方法吗?如果有其他解决方案,我不需要使用“阅读”。
我查看了类似的Bash variable scope,但我无法从中获得任何有用的信息。
【问题讨论】:
标签: bash
如果你真的在做一些简单的事情,你甚至不需要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)
【讨论】:
然后不要使用管道,并丢失 grep
var=1
while read line
do
case "$line" in
*foo* ) var=1
esac
done <"file"
echo "var after: $var"
【讨论】: