理论上,命令的结果echo *
应该是“当前目录中的任何文件”。它应该包括点文件吗?
同样,结果应该ls *
包含点文件吗?
答案1
来自文件名扩展GNU bash 参考部分:
当模式用于文件名扩展时,字符“.”文件名开头或紧跟在斜杠后面的字符必须显式匹配,除非设置了 shell 选项 dotglob。匹配文件名时,斜杠字符必须始终显式匹配。在其他情况下,“.”性格没有受到特殊对待。
这是所有 POSIX shell 中记录的(和预期的)行为,请参阅用于文件名扩展的模式:
如果文件名以句点 ( '.' ) 开头,则应通过使用句点作为模式的第一个字符或紧跟在斜杠字符后面来显式匹配句点。领先期间不得与以下各项匹配:
星号或问号特殊字符
包含非匹配列表的方括号表达式(例如“[!a]”)、范围表达式(例如“[%-0]”)或字符类表达式(例如“[[:punct:]]”)
未指定括号表达式匹配列表中的显式句点(例如“[.abc]”)是否可以匹配文件名中的前导句点。