Não tenho certeza se isso ainda é um problema para você, mas me deparei com algo semelhante ao tentar obter a conclusão do nome do meio da palavra e tenho algumas ideias para possíveis soluções.
Alterar a variável IFS
adicionando local IFS=$'\n'
corrigiu o problema com espaços em nomes de arquivos para mim, pode valer a pena tentar.
Como para tornar as coisas insensíveis a maiúsculas e minúsculas, você pode forçar $curr
a minúsculas para compgen usando ${cur,,}
. A função completa ficaria assim depois de ambas as alterações:
_th() {
local IFS=$'\n'
local curr=${COMP_WORDS[COMP_CWORD]}
COMPREPLY=( $(compgen -f -X '!*.@(tar|tar.xz|tar.bz2|tar.gz|tbz|tgz)' -- "${curr,,}") )
}
complete -F _th -o filenames th
Isso tornaria o nome do arquivo inteiro compatível com maiúsculas e minúsculas. Se você quer apenas a extensão de maiúsculas e minúsculas insensível você poderia fazer alguma manipulação de string para $cur
para fazer apenas a extensão em minúsculas.