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

Rol*_*and 5 bash environment-variables

考虑以下代码:

#!/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)
Run Code Online (Sandbox Code Playgroud)

输出:

dummy: Hello
printenv dummy: Hello
dummy:
printenv dummy:
Run Code Online (Sandbox Code Playgroud)

你如何解释这一点?我认为环境始终是全局的,因此变量dummy在函数外部也是可见的。

che*_*ner 8

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

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


cho*_*oba 6

declare函数内部默认为local. 用于-g从函数内部声明全局。