无法在env循环中导出envvars?
我有一个函数,我试图导出一些环境变量:
env -0 | while IFS='=' read -r -d '' env_var_name env_var_value; do
# Some logic here, then:
export MY_ENV_VAR=hello
done
但是,我只是注意到这一点export并且unset在此循环中不起作用。如果我不能在循环内执行这些导出,那么执行这些导出的最佳方法是什么?将它们存储在某个地方并在循环外执行它们?
回答
循环不是问题。问题实际上是管道。当您通过管道传递到命令时,会创建一个子外壳,并且在该子外壳内设置的任何变量在退出时都会消失。您可以使用进程替换来解决此问题:
while IFS='=' read -r -d '' env_var_name env_var_value; do
# Some logic here, then:
export MY_ENV_VAR=hello
done < <(env -0)