1

当我在主目录中并在终端中键入“ls *s*”时,它会显示所有名称中包含“s”的文件夹和文件(例如音乐)。但是当我输入“ls *si*”时,它什么也没有显示(我认为应该列出音乐)。这是为什么?

4

1 回答 1

5

这是一种错觉。通配符在命令执行之前被扩展,“ls”显示的内容取决于扩展产生的单词数量。当“ls”列出多个东西时,它会显示它列出的每个文件夹的名称。当“ls”只列出一个文件夹时,它只显示内容,不显示名称。

当您键入“ls *s*”时,字符串会扩展为多个名称,因为您的目录中包含多个名称包含“s”。结果就像您输入了“ls Desktop Music”之类的内容。当“ls”列出多个内容时,它会显示目录名称以及每个目录的内容,因此您会得到一个列表,例如:

Desktop:
foo

Music:
iTunes

当您键入“ls *si*”时,该字符串仅扩展为一个名称,因为目录中包含“si”的唯一名称是“Music”。结果就像您输入了“ls Music”。当“ls”列出一个文件夹时,它只显示文件夹的内容,不显示名称,因此您会得到一个列表,例如:

iTunes

要使“ls”仅列出匹配的内容,而不是其内容,请使用“ls -d *si*”。“-d”表示以与列出文件相同的方式列出目录,而不是列出其内容。

于 2013-05-24T13:12:44.597 回答