在bash我有一个应该导出一些变量的函数,但它没有。
这里有一个例子:
function f() {
# ...
declare -rx TIMESTAMP_FORMAT='+%Y-%m-%d %H:%M:%S'
# ...
}
从内部执行此操作的正确方法是什么function
?
将变量声明为全局使用选项-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
应该没问题。
不要使用声明,您的变量也将在函数外部可用。
function f() {
# ...
TIMESTAMP_FORMAT='+%Y-%m-%d %H:%M:%S'
# ...
}
f # call your function
echo "OUTSIDE: " $TIMESTAMP_FORMAT