我想创建一个bash函数bar
,该函数将一个函数foo
作为参数,但也带有foo
参数。
function foo() {
foo_args=("$@")
for i in "${foo_args[@]}";
do
echo "$i"
done
}
function bar() {
($1)
}
foo_args=(
"one" "two" "three"
)
bar foo foo_args
我怎么foo_args
去bar
?
编辑:
我试过了:
bar foo "${foo_args[@]}"
带有:
function bar() {
params="${3}"
($1 ${params[@]})
}
但是foo
只看第一个元素。
这是不是很确定您打算什么你做foo()
和bar()
功能,但在功能bar
您没有得到整个位置参数,只是$1
,用$@
代替。我已经修改,以满足您的要求,假设你需要从传递参数的代码bar()
来foo()
。由于您的第一个参数包含函数名称,因此请将该函数名称放入$1
并用于shift
删除$1
其余参数$@
还要function
从函数定义中删除非标准关键字。不用说是完全可以的
#!/usr/bin/env bash
foo() {
foo_args=("$@")
for arg in "${foo_args[@]}"; do
echo "$arg"
done
}
bar() {
function=$1; shift
[ "$(type -t "$function")" = function ] ||
{ echo "$function prototype is not available" >&2; return 1 ; }
"$function" "$@"
}
foo_args=(
"one" "two" "three"
)
bar foo "${foo_args[@]}"
同样可以安全地进行检查type -t
以确保所调用函数的原型存在,并且如果不存在则抛出错误消息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句