Remova as aspas em torno de *.txt
e isso deve funcionar. Com aspas, o shell procurará o nome literal do arquivo *.txt
. Para explorar / experimentar, tente criar um arquivo com o nome *.txt
as touch '*.txt'
e repita o comando.
~$ echo $(ls)
arguments.txt cecho.sh Desktop Documents Downloads example.txt Music Pictures Public
~$ echo $(ls "*.txt")
ls: cannot access *.txt: No such file or directory
Por que o segundo comando subshell falha?
Da mesma forma que você não pode executar ls "*.txt"
em um shell normal, você não pode executá-lo em um subshell também. Quando você coloca *.txt
entre aspas, você fez ls
procurar por um arquivo literal chamado *.txt
quando você deveria estar fazendo isso:
$ echo $(ls *.txt) # => file.txt otherfile.txt
A melhor maneira de fazer isso é não usar ls
.
$ echo *.txt # => file.txt otherfile.txt