5

这对你们来说很容易,但我找不到这个问题的明确/正式答案。

假设我们在目录 A 中。那么,

“A/*”可能意味着:A 中的每个文件和文件夹。

“A/**”则可能意味着:A 中的每个文件和文件夹,以及直接位于 A 中的每个子项中的每个文件和文件夹。(基本上,/* 运算符的扩展,它遍历根文件夹的更深一层? 又名 "/** " = "/* /* " )

我的“直接内部”术语可能是错误的。说“直接孩子”或其他东西可能会更好,但你明白了。

那么,“A/**/*”是什么意思呢?它是否等于 "A/* /* /* " ?

虽然这看起来很基本,但当我没有对运算符的正式定义时,它会很混乱。

我目前正在使用 Javascript 并尝试修改 Gruntfile。但我想这些运算符可能会在任何情况下出现。

4

2 回答 2

8

这种行为不是 JavaScript 固有的,也与任何运算符无关:就 JavaScript 而言,它只是一个字符串。

这种全局扩展的处理由特定的库/消费者决定。对于 gruntjs,它包含在Grunt Globbing Patterns中:

单独指定所有源文件路径通常是不切实际的,因此 Grunt 通过内置的 node-glob 和 minimatch 库支持文件名扩展(也称为 globbing)。

  • *匹配任意数量的字符,但不匹配/

  • **匹配任意数量的字符,包括/, 只要它是路径部分中的唯一内容

大多数人需要知道的是,foo/*.js它将匹配 foo/ 子目录中所有以 .js 结尾的文件,但foo/**/*.js会匹配 foo/ 子目录及其所有子目录中所有以 .js 结尾的文件。

因此(但请参阅特定文档!),/**/通常意味着“匹配任何深度的目录”和/*//*意味着“匹配单个目录或文件部分”。


**gruntjs 文档对标准模式中的具体机制有点含糊"/**/*.x",但参考node-glob说:

如果“globstar” ( **)在路径部分中单独存在,则它匹配零个或多个目录和子目录以搜索匹配项。它不会爬取符号链接的目录。

[.. 双星字符] 以 bsdglob 和 bash 4.3 的方式支持,其中** 只有当它是路径部分中唯一的东西时才具有特殊意义。也就是说,a/**/b将匹配a/x/y/b,但a/**b不会。

A/**/f使用这些知识,我们得到每个中间目录数量A/f的等价性(当用作路径组件时)A/*/fA/*/*/f

于 2014-12-19T22:16:47.180 回答
0

如果你看到A/**/*这意味着递归搜索文件夹下每个文件夹的树A。有关更多信息,请查看基本的 linux 样式文件命令。

于 2014-12-19T22:15:06.613 回答