在 Bash 手册中,对于文件名扩展:
当模式用于文件名扩展时,
.
文件名开头的字符或紧跟在斜杠后面的字符必须显式匹配,除非设置了 shell 选项 dotglob。匹配文件名时,斜杠字符必须始终显式匹配。
在其他情况下,
.
角色不会受到特殊对待。
您能举一些例子来解释引用中的情况吗?
我该如何区分 in 文件名扩展的用法.
和与硬链接无关的用法.
?
答案1
没有用法.
文件名扩展中的。如果您使用文件名扩展,则通常会排除以 开头的文件名,除非您明确要求使用或 之.
类的内容。不是文件名中的有效字符,因此不匹配..*
.?
/
*
/
$ touch foo .foo; echo *; echo .*; echo ./*; echo; ./.*
foo
.foo
./foo
./.foo
请注意如何排除*
和- 但第一个命令没有使用,而第三个命令使用了,因此通配符与 之间用a分隔。要匹配以 开头的文件名,您必须显式指定前导- , 。然而,在这种情况下, 的角色与中的角色没有什么不同。./*
.foo
echo
.
echo
./
.
/
.
.
.*
./.*
.
a
a*
可以使用 来禁用此异常shopt -s dotglob
。
由于文件名扩展中没有特殊用法.
,因此没有什么可区分的。文件名扩展中唯一的特殊字符是*
, ?
, [...]
。