2

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

这里有一个例子

function f() {

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

}

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


我的环境

v3.2.48(1)-发布 10.8.3


4

2 回答 2

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应该没问题。

于 2013-04-02T13:37:07.537 回答
0

不要使用声明,您的变量也将在函数外部可用。

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

f # call your function
echo "OUTSIDE: " $TIMESTAMP_FORMAT
于 2013-04-02T13:47:59.323 回答