~$ 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?
Elimine las comillas *.txt
y debería funcionar. Con comillas, shell buscará el nombre de archivo literal *.txt
. Para explorar / experimentar, intente crear un archivo con nombre *.txt
como touch '*.txt'
y repita el comando.
bash
y similareszsh
) 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.De la misma manera que no puede ejecutarse
ls "*.txt"
en un shell normal, tampoco puede ejecutarlo en un subshell. Cuando pones*.txt
comillas, hiciste unals
búsqueda de un archivo literal llamado*.txt
cuándo deberías estar haciendo esto:Una mejor manera de hacer esto es no usarlo
ls
en absoluto.fuente
ls
.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 ...