问题描述
我有一个这样的代码
var="before"
echo "$someString" | sed '$someRegex' | while read line
do
if [ $condition ]; then
var="after"
echo "$var" #first echo
fi
done
echo "$var" #second echo
这里首先回显后,但第二个是之前。如何在之后进行第二个回显打印。我认为这是因为管道购买我不知道怎么弄清楚。
Here first echo print "after", but second is "before". How can I make second echo print "after". I think it is because of pipe buy I don't know how figure out.
感谢任何解决方案...
Thanks for any solutions...
回答编辑:
我更正了它,它的工作正常。感谢eugene你的有用答案
I corrected it and it works fine. Thanks eugene for your useful answer
var="before"
while read line
do
if [ $condition ]; then
var="after"
echo "$var" #first echo
fi
done < <(echo "$someString" | sed '$someRegex')
echo "$var" #second echo
推荐答案
这个行为的原因是,当$ code> while 循环在子shell中运行时,它是管道的一部分。对于上述而
循环,将创建一个带有自己的变量 var
副本的新subshell。
The reason for this behaviour is that a while
loop runs in a subshell when it's part of a pipeline. For the while
loop above, a new subshell with its own copy of the variable var
is created.
有关可能的解决方法,请参阅此文章:。
See this article for possible workarounds: I set variables in a loop that's in a pipeline. Why do they disappear after the loop terminates? Or, why can't I pipe data to read?.
这篇关于在bash中无法使用while和pipe的变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!