bash 自动完成个人命令:无法自动完成选项后的参数

bash 自动完成个人命令:无法自动完成选项后的参数

我为命令编写了自动完成函数,但它不是自动完成选项标志后的参数

function _qpdm_complete() 
{
    local cur prev options my_list
    COMPREPLY=()

    cur="${COMP_WORD[COMP_CWORD]}"
    prev="${COMP_WORD[COMP_CWORD-1]}"
    options="-opt" 
    my_list="quantum alpha betta omega operation"   

    if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then
        COMPREPLY=( $(compgen -W "${options}" ${cur}) )
        return 0
    else 
        COMPREPLY=( $( compgen -W "${my_list}" -- ${cur}) )
    fi
}

complete -F _qpdm_complete qpdm

然后在终端

qpdm <TAB>

qpdm -opt 

qpdm -opt<TAB>

qpdm -opt  
quantum alpha betta omega operation

qpdm -opt o<TAB>

期待

qpdm -opt o
omega operation

但得到

qpdm -opt o  
quantum alpha betta omega operation 

我的 _qpdm_complete() 中遗漏了什么?

答案1

可能只是一个拼写错误:COMP_WORD不是 Bash 使用的变量(或者至少我无法在手册中找到它)。你应该写COMP_WORDS反而。

在您的代码中,curprev始终为空,因为${COMP_WORD[COMP_CWORD]}${COMP_WORD[COMP_CWORD-1]}引用未定义的变量。并且compgen,正确地,总是返回与空的 匹配的所有选项值cur

相关内容