gpt4 book ai didi

bash 管道防止全局变量分配

转载 作者:行者123 更新时间:2023-11-29 09:03:27 24 4
gpt4 key购买 nike

unset v
function f {
v=1
}
f | cat
echo v=$v
f
echo v=$v

为什么管道(对任何命令)会阻止第一个 echo 命令打印 1?第二个 echo 打印 1。我使用的是 bash shell。我可以通过复制/粘贴或将其作为脚本运行来查看。

最佳答案

管道的所有组件(如果有多个)都在子 shell 中执行,并且它们的变量分配不会保留到主 shell。

原因是 bash 不支持真正的多线程(并发访问变量),只支持并行运行的子进程。


如何避免这种情况:

您必须在 main bash 进程中执行您想要保留的任何变量赋值(或找到某种方式将它们转移到那里)。执行此操作的 bash 方法不是使用管道,而是使用进程替换:

f > >( cat )

当然,如果您需要在管道的两个进程中都进行变量赋值,这将无济于事。然后你必须考虑一个更好的机制(也许是协同处理,并在某处输出变量?)

关于bash 管道防止全局变量分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6255303/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com