set -- *
filenames="$*"
Contanto que você não tenha modificado o valor do seu ambiente para $ IFS, o que precede é tudo o que você precisa para obter todos os nomes de arquivos não pontuados no diretório atual em uma única sequência dividida por espaços e classificada por locale em qualquer shell POSIX. Se você modificou o $ IFS, então qualquer que seja seu primeiro caractere será sub para o divisor de espaço único que acabou de ser mencionado.
Note, porém, que o acima não é garantia de que os nomes de arquivos não contenham espaços ou novas linhas, ou basicamente qualquer caractere, exceto NUL e / ou aqueles que provavelmente não estão nos nomes dos arquivos.