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 <タブ>

qpdm -opt 

qpdm -opt<タブ>

qpdm -opt  
quantum alpha betta omega operation

qpdm -opt o<タブ>

予想する

qpdm -opt o
omega operation

しかし得る

qpdm -opt o  
quantum alpha betta omega operation 

私の_qpdm_complete()で何が欠けていますか?

答え1

おそらくオタイルでしょう。COMP_WORDBashで使用されている変数ではありません(または少なくともマニュアルには見つかりませんでした)。あなたは書かなければなりませんCOMP_WORDS代わりに。

コード内とはcur未定義の変数を参照するprevため、常に空です。そして正確には、nullに一致するすべてのオプション値が常に返されます。${COMP_WORD[COMP_CWORD]}${COMP_WORD[COMP_CWORD-1]}compgencur

関連情報