代码之家  ›  专栏  ›  技术社区  ›  Roland

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

  •  0
  • Roland  · 技术社区  · 3 年前

    请考虑以下代码:

    #!/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 也将在函数外部可见。

    1 回复  |  直到 3 年前
        1
  •  5
  •   chepner    3 年前

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

    什么时候 t_export 返回,变量 dummy 超出范围,这意味着无法再将其导出到新流程。

        2
  •  3
  •   choroba    3 年前

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