为什么我不能在子shell中执行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  

为什么第二个subshel​​l命令失败?

Answers:


27

删除引号*.txt,它应该工作。带引号的shell将查找文字文件名*.txt。要浏览/实验,请尝试创建名称*.txt为的文件,touch '*.txt'然后重复该命令。


6
请注意,双引号(至少在bash和类似的shell中zsh)与单引号不同!例如,参数扩展($foo)在双引号内完成,但不能在单引号内完成。
Blacklight Shining

30

就像您无法ls "*.txt"在普通Shell中运行一样,您也无法在子Shell中运行它。当你把*.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 2014年

@lngo:这也在OP的帖子中
Brian
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.