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 设置是什么,控制 * 是否匹配点文件更多细节。