如何用多个parameters/options完成一个bash的功能?

How to complete a bash function with multiple parameters/options?

我为命令定义了一个函数别名:aa 并且我定义了一个 _complete_aa 函数,该函数通过 complete -F _complete_aa aa 用作 aa 命令的建议(请参阅下面的代码)

aa(){
    anothercommand ${@}
}

_complete_aa(){
    COMPREPLY=($(compgen -W "clean build start" "${COMP_WORDS[1]}"))
}

complete -F _complete_aa aa

当我使用函数时出现意外行为:

当我键入 aa cle 并按 TAB 时,提示正确地完成了我对 aa clean

的输入

但是,当我键入 aa clean bui 并按 TAB 时,提示将我的输入完成为 aa clean clean,而我预计它应该变为 aa clean build

我想我的错误出在下面的完成函数中,它没有处理当前完成的单词的索引。

_complete_aa(){
    COMPREPLY=($(compgen -W "clean build start" "${COMP_WORDS[1]}"))
}

问题:我应该如何更改 _complete_aa 函数的主体,以便在我输入的每个新 option/parameter 中将当前单词完成为 clean build start

索引 COMP_WORDS 与当前单词索引。

aa() {
    anothercommand "$@"
}

_complete_aa() {
    COMPREPLY=($(compgen -W "clean build start" "${COMP_WORDS[$COMP_CWORD]}"))
}

complete -F _complete_aa aa

"${COMP_WORDS[1]}" 始终是命令后的第一个词。

完成函数获取位置参数,其中</code>是"word being completed",所以你可以这样做:</p> <pre><code>_complete_aa(){ COMPREPLY=($(compgen -W "clean build start" "")) }

如果您的补全真的只是给定单词的选择,您可以改用更简单的 -W 补全:

complete -W 'clean build start' aa