Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Can';t在bash中使用变量out of while和pipe_Linux_Bash_Environment Variables_Pipe - Fatal编程技术网

Linux Can';t在bash中使用变量out of while和pipe

Linux Can';t在bash中使用变量out of while和pipe,linux,bash,environment-variables,pipe,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 这里第一个回音打印“之后”,但第二个是“之前”。如何在“之后”进行第二次回显打印。我想是因为买

我有这样的密码

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
这里第一个回音打印“之后”,但第二个是“之前”。如何在“之后”进行第二次回显打印。我想是因为买烟斗的缘故,我不知道该怎么解释

感谢您提供的任何解决方案

答案编辑:

我纠正了它,效果很好。谢谢尤金的回答

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
var=“之前”
读行时
做
如果[$条件];然后
var=“之后”
echo“$var”#第一个echo
fi

done<此行为的原因是
while
循环作为管道的一部分在子shell中运行。对于上面的
while
循环,将创建一个新的子shell,其中包含变量
var
的副本

有关可能的解决方法,请参阅本文: