我想创建一个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
只看第一个元素。
答案 0 :(得分:1)
不是十分确定您打算使用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
进行检查,以确保所调用函数的原型存在,如果不存在则抛出错误消息。