为什么 shell glob 默认省略点文件?

为什么 shell glob 默认省略点文件?

1)

echo *

只显示包含[az, AZ]的文件名,但不显示以.开头的文件。

比如.bashrc没有用shell glob覆盖*

2)

echo .*给出预期的输出。


在第一种情况下,为什么 shell glob 不包含带点的文件名?

答案1

默认情况下,这就是通配符的工作方式(一般来说,不仅仅是在 shell 中)。根据glob(7)联机帮助页

路径名

[...]

如果文件名以“.”开头,则必须显式匹配该字符。 (因此,rm *不会删除 .profile,也tar c *不会存档您的所有文件;tar c .更好。)

也可以看看POSIX 的相关部分

您可以使用 shell 设置来更改此设置,或者在某些 shell 中添加通配修饰符来临时更改行为;看bash 中的 globbing 设置是什么,控制 * 是否匹配点文件更多细节。

相关内容