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)
这种行为的原因是当一个while循环是管道的一部分时,循环在子shell中运行.对于while上面的循环,创建了一个带有自己的变量副本的新子shell var.
有关可能的解决方法,请参阅此文章:我将变量设置在管道中的循环中.它们为什么在循环结束后消失?或者,为什么我不能管道数据读取?.