将函数局部变量导出到环境
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
超出范围,这意味着它不再可用于导出到新进程。
考虑以下代码:
#!/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
超出范围,这意味着它不再可用于导出到新进程。