我该如何理解“。”在文件名扩展中?

我该如何理解“。”在文件名扩展中?

在 Bash 手册中,对于文件名扩展:

当模式用于文件名扩展时,.文件名开头的字符或紧跟在斜杠后面的字符必须显式匹配,除非设置了 shell 选项 dotglob。

匹配文件名时,斜杠字符必须始终显式匹配。

在其他情况下,.角色不会受到特殊对待。

您能举一些例子来解释引用中的情况吗?

我该如何区分 in 文件名扩展的用法.和与硬链接无关的用法.

答案1

没有用法.文件名扩展中的。如果您使用文件名扩展,则通常会排除以 开头的文件名,除非您明确要求使用或 之.类的内容。不是文件名中的有效字符,因此不匹配..*.?/*/

$ touch foo .foo; echo *; echo .*; echo ./*; echo; ./.*
foo
.foo
./foo
./.foo

请注意如何排除*和- 但第一个命令没有使用,而第三个命令使用了,因此通配符与 之间用a分隔。要匹配以 开头的文件名,您必须显式指定前导- , 。然而,在这种情况下, 的角色与中的角色没有什么不同。./*.fooecho.echo././...*./.*.aa*

可以使用 来禁用此异常shopt -s dotglob

由于文件名扩展中没有特殊用法.,因此没有什么可区分的。文件名扩展中唯一的特殊字符是*, ?, [...]

相关内容