我最近在玩 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