Se os nomes dos seus arquivos não tiverem nenhuma nova linha, você poderá fazê-lo apenas informando ao shell para dividir a saída de ls apenas em novas linhas, e não em nenhum espaço em branco como padrão. A divisão é controlada pela variável IFS , todos os caracteres contidos em IFS são usados como delimitadores.
IFS=$'\n' # set it to just a newline
convert $(ls -vd ./*.png) output.pdf
Isso ainda pode ter problemas se os nomes dos arquivos forem engraçados o suficiente ou se ls os manuseia para exibição. Ao imprimir em um terminal, ls geralmente lista os arquivos em várias colunas. Mas quando a saída não vai para um terminal (o shell lê, aqui), ela age como se -1 fosse dado.
Para trabalhar com a ideia que você começou, você poderia usar eval .
eval: eval [arg ...]
Combine ARGs into a single string, use the result as input to the shell, and execute the resulting commands.
Mas o problema com eval é que qualquer coisa e tudo na linha de comando é analisado novamente, e até mesmo coisas que normalmente são seguras, não são. Pense em um arquivo chamado $(touch HELLO) e o que acontece se um nome como esse for solto na linha de comando.
Além disso, se você seguir esse caminho, talvez queira usar --quoting-style=shell em vez de -Q , pois ele pode corresponder mais de perto ao processamento do shell dos caracteres especiais. (Ambos podem ser específicos do GNU ls, mas acho que -v também é.)