我有类似的代码
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
这里首先回显“后”,但第二次是“之前”。如何在“之后”进行第二次回声打印。我认为这是因为买管我不知道怎么弄清楚。
感谢任何解决方案...
回答编辑:
我纠正了它并且工作正常。感谢eugene提供有用的答案
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
答案 0 :(得分:7)
这种行为的原因是当while
循环是管道的一部分时,它会在子shell中运行。对于上面的while
循环,会创建一个带有自己的变量var
副本的新子shell。
有关可能的解决方法,请参阅此文章: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?。