Basta especificar o caminho completo junto com o padrão:
ls -d -- "${txtpath}"/*.txt
Embora, na verdade, a listagem seja feita pela globalização do shell, ls
acaba imprimindo apenas os argumentos que recebe do shell. Você também pode usar printf
aqui:
printf '%s\n' "${txtpath}"/*.txt
O que daria o mesmo resultado, exceto (nos shells que não cancelam comandos em globs não correspondentes) no caso em que não há nenhum arquivo txt
não oculto no diretório.