叫什么名字
*.*
符号及其意义是什么?
答案1
*.*
旧Windows/DOS系统下的解读
这里的意义更多地与 Windows/DOS 相关,而不是与 Unix/Linux 相关。在旧的 Windows/DOS 系统上,它是“通配符”模式。通配符模式用于以与 Unix glob 类似的方式匹配文件名。通配符*.*
通常用于匹配任何文件。
与 Unix glob 一样,*
将匹配文件名中的任何字符序列,因此*
其本身也将匹配任何文件。然而,之所以*.*
会匹配任何文件名,是因为这些通配符的工作方式存在差异。根据本文:
星号后面除了点之外的任何字符都没有效果,因为星号将光标移动到位置 12,此时除了点之外没有任何内容会更改解析状态,该点会清除最后三个位置并移动光标。
这种行为(从 Unix 角度来看有点奇怪)意味着 a 后面的点*
实际上并不匹配点,而只是一种允许您向模式添加更多字符的黑客方式。这意味着添加另一个*
将匹配最后三个位置中的任何内容。
当您考虑到该语法在 Windows 95 之前的 DOS 和旧 Windows 系统上使用时,这就更有意义了,这需要8.3 文件名。这些文件名只允许有一个点,并且点后面最多有三个字符。系统上的大多数文件(如果不是所有文件)都会有一个三个字符的扩展名(即使从技术上讲,允许更短的扩展名或不允许扩展名),所以不知何故,我认为用于*.*
匹配任何文件是有意义的(至少从扭曲的 Windowsey 逻辑角度来看) )。
*.*
Unix shell 中的解释
在 Unix shell 中,正如其他人指出的那样,这代表“路径名扩展”或“glob”。没有*
任何奇怪的跳转到结束行为,因此不会导致其后面的字符被忽略。*.*
模式将匹配任何包含点的文件名(开头除外)。这肯定不会匹配任何文件,因为 Unix/Linux 系统上有很多文件不有一个扩展名(或者以其他方式包含一个点,因为这也是允许的)。
在 Unix 上不匹配文件名开头的点的原因*.*
是因为在开头加点是文件“隐藏”的方式,并且默认情况下将隐藏文件从全局中排除。为了在 POSIX shell 中匹配它们,需要在模式的开头显式放置一个点。在bash
shell中dotglob
可以设置选项或者GLOBIGNORE
可以适当设置变量,但这是另一个问题!
答案2
它是glob
在bash
。下面我引用了bash手册:
bash - GNU Bourne-Again SHell
*
匹配任何字符串,包括空字符串。当
globstar
启用 shell 选项并*
在路径名扩展上下文中使用时,*s
用作单个模式的两个相邻的将匹配所有文件以及零个或多个目录和子目录。如果后跟/
,则两个相邻的*s
将仅匹配目录和子目录。
在这种情况下,匹配名称中*.*
包含点的任何文件。.
您可以查看更多详细信息这里。
答案3
答案4
*
是 shell 使用的通配符来执行文件名扩展,也称为“通配符”。 *
扩展到任何内容,包括什么都没有(例如,*.*
will matchfile.
等)。另一个常见的通配符是?
,它匹配任何单个字符。
不要将这些通配符的功能与正则表达式中相同字符的使用(例如 grep 中使用的字符)混淆。