不能在bash中使用while和pipe中的变量

时间:2011-07-04 13:51:50

标签: linux bash environment-variables pipe

我有类似的代码

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

1 个答案:

答案 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?