Чому я не можу зробити ls * .txt в нижній частині корпусу?


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  

Чому 2-а командна підказка не працює?

Відповіді:


27

Видаліть цитати навколо, *.txtі це має спрацювати. З цитатами оболонка буде шукати буквальне ім'я файлу *.txt. Щоб дослідити / експериментувати, спробуйте створити файл з ім'ям *.txtяк touch '*.txt'і повторіть команду.


6
Зауважте, що подвійні лапки (принаймні, в bashподібних оболонках і подібні до них zsh) не збігаються з одинарними цитатами! Наприклад, розширення параметрів ( $foo) проводиться всередині подвійних лапок, але не одиничних лапок.
Blacklight Shining

30

Таким же чином, як ви не можете запуститись ls "*.txt"у звичайній оболонці, ви також не можете запустити її в нижній частині. Коли ви ставите *.txtлапки, ви здійснили lsпошук буквального файлу, який називався, *.txtколи замість цього ви повинні робити це:

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

Кращий спосіб зробити це - взагалі не використовувати ls.

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

7
+1 для видалення зайвого ls.
Blacklight Shining

3
Нитчіпкінг: Ви можете бігати ls -l "*.txt". Або принаймні можу. Я роблю це не часто, але коли я це роблю, зазвичай мені кажуть, що не вдалося знайти * .txt ...
Ingo

@lngo: Це теж на посаді ОП
Брайан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.