compgen: mengabaikan case

9

Saya mencoba menerapkan penyelesaian bash khusus seperti yang dijelaskan di sini . Namun, tampaknya bahwa compgenadalah case-sensitive . Apakah ada cara untuk mengubahnya tidak peka huruf besar-kecil dalam konteks itu?

Pierre
sumber

Jawaban:

5

Saya akan memodifikasi contoh dari tautan yang Anda sebutkan menjadi sesuatu seperti ini:

_foo() 
{
    local cur prev opts
    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD],,}"     # this downcases the result
    prev="${COMP_WORDS[COMP_CWORD-1],,}"  # here too
    opts="--help --verbose --version"

    if [[ ${cur} == -* ]] ; then
        COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
        return 0
    fi
}
complete -F _foo foo

Untuk info lebih lanjut, lihat dokumentasi bash atau situs peretas bash .

Rajish
sumber
Tapi ini bergantung pada fakta bahwa optssemua huruf kecil. Jika ya --help --verbose --VERSION, itu tidak akan pernah menyelesaikan kasus ketiga.
Enrico Maria De Angelis