~$ 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
Dlaczego nie działa polecenie drugiej podpowłoki?
Usuń cytaty *.txt
i powinno działać. Z cudzysłowami powłoka szuka literalnej nazwy pliku *.txt
. Aby eksplorować / eksperymentować, spróbuj utworzyć plik o nazwie *.txt
as touch '*.txt'
i powtórz polecenie.
bash
i podobne powłokizsh
) nie są takie same jak pojedyncze cudzysłowy! Na przykład interpretacja parametrów ($foo
) jest wykonywana w cudzysłowach, ale nie w pojedynczych cudzysłowach.W ten sam sposób, w jaki nie można uruchomić
ls "*.txt"
w normalnej powłoce, nie można również uruchomić go w podpowłoce. Kiedy wpisujesz*.txt
cudzysłowy,ls
szukałeś dosłownego pliku o nazwie,*.txt
kiedy zamiast tego powinieneś to zrobić:Lepszym sposobem na to jest wcale
ls
.źródło
ls
.ls -l "*.txt"
. A przynajmniej mogę. Robię to nie często, ale kiedy to robię, zwykle mówi mi, że nie można znaleźć * .txt ...