为什么这个通配符不像我期望的那样工作?

Ash*_*ame 11 ls

在我的用户文件夹,我有这样的文件夹d ropbox,d ocuments,d ownloads&d UMP。

ls a*应该列出名称以a. 对?但是当我给出命令时ls d*,它不是只显示dump它,而是向我显示转储目录的 ls。当我给出命令 as 时ls D*,它会显示所有以D开头的折叠的 ls

那么我在理解它时错过了哪一部分?

编辑:附上截图 截图

bin*_*inW 17

根据 bash 手册页:

bash 扫描每个单词中的字符 *、? 和 [。如果出现这些字符中的一个,则将该单词视为一个模式,并替换为与该模式匹配的按字母顺序排序的文件名列表

和来自ls 的信息节点

`ls' 程序列出有关文件(任何类型,包括目录)的信息。像往常一样,选项和文件参数可以任意混合。

对于作为目录的非选项命令行参数,默认情况下 'ls' 不递归地列出目录的内容,并省略名称以 '.' 开头的文件。对于其他非选项参数,默认情况下 `ls' 只列出文件名。如果没有指定非选项参数,'ls' 列出当前目录的内容。

所以当你给ls d*d*被扩展为所有以 d 开头的文件/目录名称的排序列表。所以你的命令变成

ls dump
Run Code Online (Sandbox Code Playgroud)

由于 dump 是一个目录名称,因此您可以获得目录“dump”中所有文件的列表,但是当您给出时ls D*D*会扩展为“ Desktop Documents Downloads Dropbox ”,因此命令变为

ls Desktop Documents Downloads Dropbox
Run Code Online (Sandbox Code Playgroud)

由于所有这些都是目录,因此您可以在单个目录中获得文件列表。如果当前目录中有一个以D开头的文件,它将被单独列出。

  • 一个小补充:当多个目录作为参数给出时,ls 在列出其内容之前显示每个目录的名称。它不会为单个目录执行此操作。 (2认同)

Joã*_*nto 7

ls d* 和 D* 都分别列出了与 d* 和 D* 匹配的文件和文件夹,行为是一样的,你的测试肯定有错误。

如果只想列出文件夹名称而不列出文件夹内容,则需要使用“-d”:

ls -d D*
Run Code Online (Sandbox Code Playgroud)