Por que não consigo fazer ls * .txt em um subshell?

13
~$ 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?

    
por Jim 09.02.2014 / 23:12

2 respostas

27

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.

    
por 09.02.2014 / 23:17
30

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
    
por 09.02.2014 / 23:27

Tags