我在bash脚本中有两个变量。一个包含脚本中的函数名称,而另一个是包含KEY=VALUE
或KEY='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'")
如果将foo
对添加到环境中,我将如何使用它们来调用funcenv
? (非变量)调用看起来像
MYVAR=test MYVAR2='tes2 test3' foo
我试着像
那样编写脚本"${funcenv[@]}" "$funcname"
但这会导致错误(MYVAR=test: command not found
)。
如何使用放在其环境中的数组的参数正确调用该函数(我不想导出它们,它们应该只用于调用的函数)?
答案 0 :(得分:3)
你可以这样做:
DateTimeFormatter targetFormat = DateTimeFormatter.ofPattern("yyyy/MM/dd hh:mm a").withLocale(locale);
但请注意,变量在函数外部也是可见的。
如果你想避免这种情况,那么你可以将所有上述内容包装在declare -a funcenv=(MYVAR=test "MYVAR2='test2 test3'")
for pairs in "${funcenv[@]}"; do
eval "$pairs"
done
"$funcname"
子shell中。
答案 1 :(得分:0)
为什么不将它们作为参数传递给你的函数?
function f() { echo "first: $1"; echo "second: $2"; }
fn=f; $fn oneword "two words"