只是对命令“ls *”的输出感到困惑。我在 Ubuntu 11.10 和 Redhat Enterprise 6.3 中测试了以下场景,得到了相同的结果。

shell 日志

$ uname -a
   Linux 2.6.32-279.19.1.el6.x86_64 #1 SMP Sat Nov 24 14:35:28 EST 2012 x86_64 x86_64 x86_64 GNU/Linux
$ echo $0
   -bash
$ cd test
$ ls
$ ls *             *<== at first, no file/directory under current work directory*
ls: cannot access *: No such file or directory
$ mkdir abc        *<== create a new directory "abc"*
$ ls *             *<== output of "ls *" is empty but directory "abc" has been created.*
$ mkdir abcd       *<== create the second directory "abcd"*
$ ls *             *<== at this point, all the directories("abc" and "abcd") are displayed.*
abc:

abcd:

谁能解释为什么创建目录“abc”后“ls *”的输出为空?谢谢。

最佳答案

这主要是因为 glob 模式是由 shell 扩展的,而不是由 ls 本身扩展的。

因此,在创建一个空的 abc 目录后,发出:

$ ls *

结果是 ls 被调用,就像您键入:
$ ls abc

其中列出了 abc 的内容。由于 abc 为空,因此不会打印任何内容。

同理,在创建 abcd 后,发出:
$ ls *

结果是 ls 被调用,就像您键入:
$ ls abc abcd

并且由于传递了两个目录,ls 将在列出它们的(空)内容之前将每个目录打印为标题。

关于linux - "ls *"的输出不一致,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20496562/

10-15 05:14