Answers:
*.*
旧版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上,文件名开头不匹配点的原因是,默认情况下,“点”是文件的“隐藏”方式,而隐藏文件是从glob中排除的。为了在POSIX shell中匹配它们,需要在模式的开头显式地放置一个点。在bash
该dotglob
外壳选项可以设置或GLOBIGNORE
变量可以适当地进行设置,但这是另外一个问题!
它glob
在bash中,下面我从bash手册中引用:
bash-GNU Bourne-Again SHell
*
匹配任何字符串,包括空字符串。启用globstar shell选项并将
*
其用于路径名扩展上下文时,两个相邻*s
的单个模式将匹配所有文件以及零个或多个目录和子目录。如果后跟一个/
,则两个相邻的*s
将仅匹配目录和子目录。
在这种情况下,请*.*
匹配.
名称中包含点的所有文件。
您可以在此处查看更多详细信息。
至少在DOS(当然还有后来的Windows)世界中,这就是点对点的星星。在DOS中,点.
具有特殊的魔术含义,因为文件名是8个字符的基数(后来扩展了,但让我们继续学习吧)和3个字符的扩展名(定义了文件类型)。在Unix中,文件类型通常由文件的前两个字节(或其他魔术)定义,并且扩展名是信息性的,但意义不大。除了什么时候变得模糊不清。
因此,在Unix中没有特殊含义。星号是Unix shell中的“ globbing”字符,是任意数量字符(包括零)的通配符。?
是另一个常见的通配符,与任何一个字符都完全匹配。
*.*
匹配包含至少一个的任何文件名.
。除了*a*
或以外,没有其他特殊名称或任何含义*_*
。并且*.?
将匹配所有带点的文件,并在该点后仅一个字符。还有一些更复杂的扩展glob模式-请参见shell的手册页。
“ New Hacker's Dictionary”(旧MIT的“ Jargon File”的扩展)指出,“ star”是该*
符号最常用的名称(其后为splat
),我认为在实践中仍然是正确的,并且.
绝对是“点”,因此,虽然它没有任何内在的特殊含义,但是它在Unix上仍被合理地称为star-dot-star。(它的用处不大。)
这里实际上有2个符号,星号*
和点.
。壳通常仅将星号解释为任何字符,但在正则表达式中则表示贪婪的glob。在这种情况下,它将匹配任何不以点结尾或以点开头但包含至少一个的内容:
somefile.dot # match
.dot.between.words. # match
.onlydotatstart # don't match
onlydotatend. # match
.startandenddot. # don't match
onlydotatend.
情况肯定是对的吗?
touch 'onlydotatend.' && echo *.*
不会返回
bash
和上dash
。您正在使用什么外壳?
zsh
配置上尝试过,它也可以在这里使用。我不知道怎么onlydotatend.
不能匹配,是否有配置选项可以做到?
*7.*
,获取扩展名前最后一个字符为的所有文件7
,并使用*sa*
,获取文件名中包含子字符串的所有文件,sa
依此类推。(因此,你引用的文章的题目是如何做通配符的工作在MS-DOS?(我自己加的)。)