Здесь вообще не используйте ls
; цвета в любом случае не должны быть частью вывода, так как вы не хотите, чтобы они были частью завершения. -W
не является хорошим выбором для имен файлов, так как любое совпадающее имя файла может содержать символ, используемый для разделения слов в аргументе на -W
.
Вы должны просто использовать glob, чтобы установить COMPREPLY
напрямую:
COMPREPLY=( "$cur"* )