Declarar uma variável e atribuí-la em uma linha pode mascarar os valores de retorno. O uso de $(..)
em vez de backticks legados é preferível. Dada a falta de contexto do seu código, o seguinte código é o melhor que posso fazer sem poder testá-lo.
_xtest () {
local cur
local files
files=$(ls /home/tests)
COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]}
case "$cur" in
-*)
COMPREPLY=( $( compgen -W $files --$cur ) );;
esac
return 0
}
complete -F _xtest -o filenames xtest