デフォルトの復元完了

デフォルトの復元完了

私はcompgenwhen $COMP_WORD= 1を使用していましたが、それ以外の場合はデフォルトの完成を復元したいと思います。

今私には、

_rr()
{
    case $COMP_CWORD in
        1)
            COMPREPLY=($(compgen -W "A B" "${COMP_WORDS[$COMP_CWORD]}"))
            ;;
    esac
}

complete -F _rr rr

これ$COMP_CWORDで1以外の場合、必要なデフォルトの補完であるファイル/ディレクトリの補完は得られません。

また、この最小限の場合にのみ${COMP_WORDS[$COMP_CWORD - 1]}完了を有効にするだけです。A

答え1

実際の状況では、他の操作も実行したいと仮定しているので、コンストラクタを引き続きcase使用してください(この最小限の場合はifコンストラクタで十分ですが)。

_rr()
{
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD - 1]}"

    case "${COMP_CWORD}" in
        1)
            COMPREPLY=($(compgen -W "A B" "${cur}"))
            ;;
    esac

    case "${prev}" in
        A)
            COMPREPLY=($(compgen -f "${cur}"))
            ;;
    esac
}

complete -F _rr rr

-fこのオプションのドキュメントは、compgen以下で確認できます。バッシュリファレンスマニュアル(組み込みの説明については、サブセクションの下にスクロールしてくださいfile)。-A actioncomplete

関連情報