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

ibr*_*him 3 linux bash pipe environment-variables

我有这样的代码

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
Run Code Online (Sandbox Code Playgroud)

这里首先回显"后",但第二次是"之前".如何在"之后"进行第二次回声打印.我认为这是因为买管我不知道怎么弄清楚.

谢谢你的解决方案......

回答编辑:

我纠正了它,它工作正常.感谢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
Run Code Online (Sandbox Code Playgroud)

Eug*_*ash 7

这种行为的原因是当一个while循环是管道的一部分时,循环在子shell中运行.对于while上面的循环,创建了一个带有自己的变量副本的新子shell var.

有关可能的解决方法,请参阅此文章:我将变量设置在管道中的循环中.它们为什么在循环结束后消失?或者,为什么我不能管道数据读取?.