~$ 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 comando do 2º subshell falha?
Remova as aspas *.txt
e deve funcionar. Com aspas, o shell procurará o nome do arquivo literal *.txt
. Para explorar / experimentar, tente criar um arquivo com o nome *.txt
como touch '*.txt'
e repita o comando.
bash
conchas 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.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*.txt
aspas, vocêls
pesquisou um arquivo literal chamado*.txt
quando deveria fazer o seguinte:A melhor maneira de fazer isso é não usar
ls
nada.fonte
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 * ...