Respostas:
Da mesma forma que você não pode executar ls "*.txt"em um shell normal, também não pode executá-lo em um subshell. Ao colocar *.txtaspas, você lspesquisou um arquivo literal chamado *.txtquando deveria fazer o seguinte:
$ echo $(ls *.txt) # => file.txt otherfile.txt
A melhor maneira de fazer isso é não usar lsnada.
$ echo *.txt # => file.txt otherfile.txt
ls.
ls -l "*.txt". Ou pelo menos eu posso. Eu faço isso muitas vezes não, mas quando eu faço, ele geralmente diz-me que não poderia encontrar .txt * ...
bashconchas semelhantes e semelhanteszsh) não são iguais a aspas simples! Por exemplo, a expansão do parâmetro ($foo) é feita entre aspas duplas, mas não aspas simples.