如何将带参数的函数传递给另一个函数

How to pass a function with arguments to another function

我正在尝试制作一个通用的自动完成功能(它实际上需要几个参数,并且有一堆共享逻辑),这样我就可以轻松而整洁地维护一长串类似的命令,具有类似的自动完成功能(参数数量等)。

我有一个 bash 函数,它接受一个参数(尽可能简化):

_autocomplete() {
    COMPREPLY=( $(compgen -W "" -- "${COMP_WORDS[COMP_CWORD]}") )
    return 0
}

当我引用它时,使用一个以函数名作为参数的命令,我还想将它的参数传递给函数中的 运行:

complete -F "_autocomplete example_param" some_function

但是,当我点击 Tab 键时这不起作用,而是出现以下错误:

some_function bash: completion: function `_autocomplete example_param' not found

这是complete的限制吗?
有什么解决办法或更好的方法吗?

谢谢。

-F 选项后面应该只跟一个函数名。如果要执行带选项的命令,需要使用-C。但是该命令需要将补全打印到标准输出,而不是设置 COMPREPLY。所以把函数改成:

_autocomplete() {
    COMPREPLY=( $(compgen -W "" -- "${COMP_WORDS[COMP_CWORD]}") )
    for reply in "${COMPREPLY[@]}"
    do
        printf '%s\n' "$reply"
    done
    return 0
}

complete -C "_autocomplete example_param" some_function