将函数局部变量导出到环境

Exporting a function local variable to the environment

考虑以下代码:

#!/usr/bin/bash

t_export() {
  declare dummy="Hello"
  export dummy
  echo dummy: $dummy
  echo printenv dummy: $(printenv dummy)
}

t_export
echo dummy: $dummy
echo printenv dummy: $(printenv dummy)

输出:

dummy: Hello
printenv dummy: Hello
dummy:
printenv dummy:

你怎么解释这个?我认为环境总是全局的,因此变量 dummy 在函数外也是可见的。

函数中的

declare 默认为 local。使用 -g 从函数内部声明一个全局变量。

export 不会将值复制到当前环境中。相反,它在 name 上设置导出属性。启动新进程时,任何标有该属性的变量(连同它们的当前值)都会复制到新进程的环境中。

t_export returns 时,变量 dummy 超出范围,这意味着它不再可用于导出到新进程。