les*_*les 12 special-characters command
的名字是什么
*.*
Run Code Online (Sandbox Code Playgroud)
符号及其意义是什么?
Gra*_*eme 20
*.*
旧Windows/DOS系统下的解读这里的意义更多地与 Windows/DOS 相关,而不是与 Unix/Linux 相关。在旧的 Windows/DOS 系统上,它是一个“通配符”模式。通配符模式用于以类似于 Unix glob 的方式匹配文件名。该*.*
通配符被普遍用来匹配任何文件。
与 Unix glob 一样,*
将匹配文件名中的任何字符序列,因此*
它本身也将匹配任何文件。然而,*.*
匹配任何文件名的原因也是由于这些通配符的工作方式不同。根据这篇文章:
星号之后的除点以外的任何字符都无效,因为星号将光标移动到位置 12,此时除了点之外没有任何改变解析状态,点清除最后三个位置并移动光标。
这种行为(从 Unix 的角度来看有点奇怪)意味着 a 后面的点*
实际上并不匹配点,而只是一种允许您向模式添加更多字符的黑客方式。这意味着添加另一个*
将匹配最后三个位置中的任何内容。
当您考虑到该语法用于 DOS 和 Windows 95 之前的旧 Windows 系统(需要8.3 文件名)时,这更有意义。这些文件名只允许有一个点,点后最多三个字符。大多数,如果不是系统上的所有文件都会有一个三个字符的扩展名(即使技术上允许使用更短的扩展名或不允许扩展名),所以不知何故,我认为使用*.*
匹配任何文件是有意义的(至少从扭曲的 Windowsey 逻辑角度来看) )。
*.*
在 Unix shell 中的解释在 Unix shell 中,正如其他人指出的那样,这表示“路径名扩展”或“glob”。在*
没有任何奇怪的跳跃到最后的行为,因此不会导致以下它被忽略的字符。*.*
模式将匹配任何包含点的文件名(开头除外)。这肯定不会匹配任何文件,因为 Unix/Linux 系统上有许多文件没有扩展名(或者包含点,因为这也是允许的)。
*.*
在 Unix 上不匹配文件名开头的点的原因是,在开头放置一个点是文件被“隐藏”的方式,并且默认情况下隐藏文件从 globs 中排除。要在 POSIX shell 中匹配它们,需要在模式的开头显式放置一个点。在bash
该dotglob
外壳选项可以设置或GLOBIGNORE
变量可以适当地进行设置,但这是另外一个问题!
cuo*_*glm 12
它glob
在bash
. 下面我引用了 bash 手册:
bash - GNU Bourne-Again SHell
*
匹配任何字符串,包括空字符串。当
globstar
壳选项被启用,并且*
在一个路径名扩展上下文中使用,两个相邻的*s
作为单一模式将匹配的所有文件和零个或多个目录和子目录。如果后跟 a/
,则相邻的两个*s
将仅匹配目录和子目录。
在这种情况下,*.*
匹配.
名称中包含点的任何文件。
您可以在此处查看更多详细信息。
星号*
是glob
shell 语言中的一个。引用Shell 命令语言:
星号 (
'*'
) 是匹配任何字符串的模式,包括空字符串。
但是,.
除非dotglob
设置了 shell 选项,否则它不匹配以 a 开头的文件名。
当您使用 时*.*
,它匹配以下任何内容:
.
.
您可能还想参考手册中的文件名扩展。
很多来自 Windows 的人认为*.*
适用于所有文件。在 Windows 上,它是。在 UNIX 上,它是名称中至少包含 1 个点的所有文件。*
本身在 Windows 中工作得很好(可以追溯到早期的 DOS);然而,旧教科书出版*.*
,这似乎是一个难以打破的习惯。