繁体   English   中英

如何调用bash函数提供存储在Bash数组中的环境变量?

[英]how to call a bash function providing environment variables stored in a Bash array?

我在bash脚本中得到了两个变量。 一个包含脚本中函数的名称,而另一个是包含KEY=VALUEKEY='VALUE WITH SPACES'对的数组。 它们是解析特定文件的结果,我无法改变它。

我想要做的是调用我的名字的函数。 这很简单:

# get the value for the function
myfunc="some_function"
# invoke the function whose name is stored in $myfunc
$myfunc

考虑将函数foo定义为

function foo
{
   echo "MYVAR: $MYVAR"
   echo "MYVAR2: $MYVAR2" 
}

如果我得到变量

funcname="foo"
declare -a funcenv=(MYVAR=test "MYVAR2='test2 test3'")

如何在将funcenv添加到环境中的情况下使用它们来调用foo (非变量)调用看起来像

MYVAR=test MYVAR2='tes2 test3' foo

我试着像它一样编写脚本

"${funcenv[@]}" "$funcname"

但这会导致错误( MYVAR=test: command not found )。

如何使用放在其环境中的数组的参数正确调用该函数(我不想导出它们,它们应该只用于调用的函数)?

你可以这样做:

declare -a funcenv=(MYVAR=test "MYVAR2='test2 test3'")
for pairs in "${funcenv[@]}"; do
    eval "$pairs"
done
"$funcname"

但请注意,变量在函数外部也是可见的。 如果你想避免这种情况,那么你可以将所有上述内容包装在(...)子shell中。

为什么不将它们作为参数传递给你的函数?

function f() { echo "first: $1";  echo "second: $2"; }

fn=f; $fn oneword "two words"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM