echo * 和 echo .* 的结果

use*_*312 1 ls shell wildcards

因此,命令的结果echo *应该是“当前目录中的任何文件”。它应该包括点文件吗?

同样,结果是否应该ls *包含点文件?

Chr*_*own 5

从GNU bash 参考的文件名扩展部分:

当模式用于文件名扩展时,字符 '.' 除非设置了 shell 选项 dotglob,否则在文件名的开头或紧跟在斜杠后面的必须显式匹配。匹配文件名时,必须始终明确匹配斜杠字符。在其他情况下,“.” 字符没有被特殊对待。

这是所有 POSIX shell 中记录的(和预期的)行为,请参阅用于文件名扩展的模式

如果文件名以句点 ( '.' ) 开头,则应通过使用句点作为模式的第一个字符或紧跟斜杠字符来显式匹配句点。领先期不得与:

  • 星号或问号特殊字符

  • 包含非匹配列表的括号表达式,例如“[!a]”,范围表达式,例如“[%-0]”,或字符类表达式,例如“[[:punct:]]”

未指定括号表达式匹配列表中的显式句点(例如“[.abc]”)是否可以匹配文件名中的前导句点。