¿Por qué no puedo hacer ls * .txt en una 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 qué falla el segundo comando subshell?

Respuestas:


27

Elimine las comillas *.txty debería funcionar. Con comillas, shell buscará el nombre de archivo literal *.txt. Para explorar / experimentar, intente crear un archivo con nombre *.txtcomo touch '*.txt'y repita el comando.


66
Tenga en cuenta que las comillas dobles (al menos en mayúsculas bashy similares zsh) no son lo mismo que las comillas simples. Por ejemplo, la expansión del parámetro ( $foo) se realiza entre comillas dobles, pero no entre comillas simples.
Blacklight Shining

30

De la misma manera que no puede ejecutarse ls "*.txt"en un shell normal, tampoco puede ejecutarlo en un subshell. Cuando pones *.txtcomillas, hiciste una lsbúsqueda de un archivo literal llamado *.txtcuándo deberías estar haciendo esto:

$ echo $(ls *.txt) # => file.txt otherfile.txt

Una mejor manera de hacer esto es no usarlo lsen absoluto.

$ echo *.txt # => file.txt otherfile.txt

77
+1 para eliminar el redundante ls.
Blacklight Shining

3
Nitpicking: puedes correr ls -l "*.txt". O al menos yo puedo. No lo hago a menudo, pero cuando lo hago, generalmente me dice que no pudo encontrar * .txt ...
Ingo

@lngo: Eso también está en la publicación del OP
Brian
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.