这个通配符如何工作“* .*”

这个通配符如何工作“* .*”

这是输出。

echo  *.*
file1.txt file2.txt file3.txt

echo * .*
file1.txt file2.txt file3.txt . ..

如果第二个命令在句点之前没有空格字符,为什么会包含这些文件?感谢您的帮助非常的爱!

答案1

这是两个独立的球体。第一个*匹配除隐藏文件之外的所有内容,以便打印出file1.txtfile2.txtfile3.txt。第二个,.*仅匹配隐藏文件和目录:名称以 开头的文件和目录.,因此打印出...

如果您只想打印带有空格后跟句点的文件/目录名称,则需要转义空格,以便它不会被视为分隔符:

$ ls
 file1.txt  'file2 .txt'
$ echo *\ .*
file2 .txt

最后,我可能应该提到并不*.*意味着“匹配所有内容”。与 Windows 系统不同,*nix 系统不需要文件名扩展名(除了极少数例外,扩展名完全是可选的和任意的)。在 *nix 系统上,*.*glob 将仅打印.名称中带有 a 的文件名:

$ ls
 file   file1.txt  'file2 .txt'
$ echo *.*
file1.txt file2 .txt

要打印所有文件,请使用单个*

$ echo *
file file1.txt file2 .txt

答案2

命令的参数用空格分隔,除非它们被引号括起来。

 echo *.*

匹配包含“任何字符”( *)、后跟一个点 ( .) 和“任何字符”( *) 的文件名。

 echo * .*

第一个模式将文件名与“任何字符”( *) 相匹配。第二个模式 (" .*") 匹配以点 ( .) 开头、后跟“任何字符”( *) 的文件名。这些“点文件”与 不匹配*,这就是为什么它们通常被称为“隐藏”文件。

您看到的两个条目(“ .”和“ ..”)是当前目录和父目录所需的链接。

处理包含空格和其他“有趣”字符的文件名(文件名中仅禁止使用NUL 0x00斜杠/)很复杂(读取man find xargs),如果可能,应避免。

在文件名中引用空格有多种方法,每种方法的细节略有不同:

echo *\ .*
echo *" ."*

相关内容