从Bash导出变量

时间:2013-04-02 13:33:44

标签: bash

我有一个应该导出某些变量的函数,但它没有。

这是示例

function f() {

  # ...
  declare -rx TIMESTAMP_FORMAT='+%Y-%m-%d %H:%M:%S'
  # ...

}

function内执行此操作的正确方法是什么?


我的环境

v3.2.48(1)-release 10.8.3


2 个答案:

答案 0 :(得分:2)

将变量声明为全局使用选项-g。像这样:

function f() {

  # ...
  declare -grx TIMESTAMP_FORMAT='+%Y-%m-%d %H:%M:%S'
  # ...

}

引自help declare

  

-d在shell函数中使用时创建全局变量;除此以外           忽略


更新阅读完您的上一条评论后:

  

在函数外部可用且在子shell中可用

...看起来export是您正在寻找的命令。检查此示例:

function foo {
    export BAR="test"
}

# call function
foo

# will output 'test'
echo "$BAR"

# as the var is in environemt:
export -p | grep "BAR"

# ... it will be available from sub shells as well

注意:export解决方案缺少声明的-r(只读)功能。如果你能忍受这个,export应该没问题。

答案 1 :(得分:0)

不要使用declare,你的变量也可以在函数外使用。

function f() {
  # ...
  TIMESTAMP_FORMAT='+%Y-%m-%d %H:%M:%S'
  # ...
}

f # call your function
echo "OUTSIDE: " $TIMESTAMP_FORMAT