~$ 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
Почему 2-я команда subshell не работает?
Удалите цитаты вокруг, *.txt
и это должно работать. С кавычками оболочка будет искать буквальное имя файла *.txt
. Чтобы исследовать / экспериментировать, попробуйте создать файл с именем *.txt
as touch '*.txt'
и повторите команду.
bash
аналогичных оболочкахzsh
) не совпадают с одинарными! Например, расширение параметра ($foo
) выполняется внутри двойных кавычек, но не одинарных.Точно так же, как вы не можете работать
ls "*.txt"
в обычной оболочке, вы не можете запустить и в подоболочке. Когда вы помещаете*.txt
в кавычки, вы выполняетеls
поиск литерального файла, который называется,*.txt
когда вместо этого вы должны сделать это:Лучший способ сделать это - вообще не использовать
ls
.источник
ls
.ls -l "*.txt"
. Или, по крайней мере, я могу. Я делаю это не часто, но когда я это делаю, мне обычно говорят, что он не может найти * .txt ...