为什么Unix通配符"*"不包含".*"?

4ae*_*1e1 2 unix linux shell wildcard

考虑只有一个文件的目录.foo.然后rm -rf *不会删除.foo; 只会rm -rf .*.为什么会这样?(我想这已经是与默认的...,但有什么设计理念?我倾向于当他们都应该要删除的文件点留下.)

NPE*_*NPE 12

根据Rob Pike的说法,一个名称以点开头的文件应该被"隐藏"的整个概念是软件错误的结果.

特别是,他说:

首先,设定了一个不好的先例.许多其他懒惰程序员通过进行相同的简化来引入错误.以句点开头的实际文件在计算时通常会被跳过.

其次,更糟糕的是,创建了"隐藏"或"点"文件的想法.[...]

我很确定隐藏文件的概念是一个意想不到的后果.这肯定是个错误.

除了历史事故之外,从通配符扩展中排除隐藏文件是一个很好的保守设计决策.否则,类似命令可能rm *会造成比用户预期更多的伤害.