KornShell中的通配符(ksh)

时间:2013-05-24 13:04:11

标签: shell unix scripting ksh

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

1 个答案:

答案 0 :(得分: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”表示以列出文件的方式列出目录,而不是列出其内容。