在bash我有一个应该导出某些变量的函数,但它没有。
这是示例:
function f() {
# ...
declare -rx TIMESTAMP_FORMAT='+%Y-%m-%d %H:%M:%S'
# ...
}
在function
内执行此操作的正确方法是什么?
bash v3.2.48(1)-release osx 10.8.3
答案 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