Dlaczego nie mogę wykonać ls * .txt w podpowłoce?


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  

Dlaczego nie działa polecenie drugiej podpowłoki?

Odpowiedzi:


27

Usuń cytaty *.txti powinno działać. Z cudzysłowami powłoka szuka literalnej nazwy pliku *.txt. Aby eksplorować / eksperymentować, spróbuj utworzyć plik o nazwie *.txtas touch '*.txt'i powtórz polecenie.


6
Zauważ, że podwójne cudzysłowy (przynajmniej w bashi podobne powłoki zsh) 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.
Blacklight Shining

30

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 *.txtcudzysłowy, lsszukałeś dosłownego pliku o nazwie, *.txtkiedy zamiast tego powinieneś to zrobić:

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

Lepszym sposobem na to jest wcale ls.

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

7
+1 za usunięcie zbędnego ls.
Blacklight Shining

3
Nitpicking: Użytkownik może uruchomić 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 ...
Ingo

@lngo: To też jest post PO
Brian
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.