`echo test?` 打印 `test2` 但 `ls test?` 不打印任何内容

`echo test?` 打印 `test2` 但 `ls test?` 不打印任何内容

我最近在玩 bash globbing,我注意到以下内容:

首先,创建2个目录:

$ mkdir test
$ mkdir test2

然后:

$ echo test?

输出(正确):

test2

但:

$ ls test?

没有输出任何内容...

但是,如果您再创建一个目录(test3),echo并按ls预期工作。

有谁知道为什么会发生这种情况?

答案1

让我们试着从基础开始理解。

mkdir test
touch file
mkdir test1
mkdir test2

搜索?一个且仅一个字符。

现在,当我们发出命令时,ls tes?输出将是,file

它之所以有效,是因为我们在目录中创建了一个文件。从 的手册页来看ls

NAME
       ls - list directory contents

该目录test具有file内部结构,因此该ls命令实际上列出了该目录中存在的文件。

现在,让我们创建一个如下文件。

touch ramesh
ls rames?
ramesh

上面的命令起作用的原因是因为ramesh是一个文件并且它存在于当前目录下(根据工作ls,它列出了目录内容,并且在当前目录中实际上有一个名为 的文件ramesh)。

现在,让我们创建一个名为ram1如下的目录。

mkdir ram1
ls ram?

上面没有输出任何内容。这是因为ram1目录中当前没有文件。现在,如果我们创建另一个名为ram2并尝试的目录,它会起作用,因为它首先检查ram1目录是否有任何文件,然后检查ram2目录是否有任何文件。记住ls排序的作用。

如果您想了解更多有关内部工作的信息,请发出stat命令。

在这种情况下,stat ram?将产生如下输出:

  File: `ram1'
  Size: 4096            Blocks: 8          IO Block: 4096   directory
Device: 805h/2053d      Inode: 6743976     Links: 2
Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2014-06-30 18:17:06.000000000 -0500
Modify: 2014-06-30 18:17:03.000000000 -0500
Change: 2014-06-30 18:17:03.000000000 -0500

相关内容