这对你们来说非常简单,但我无法找到这个问题的明确/正式答案。
假设我们在目录A中。然后,
" A / *"可能意味着:直接在A。
内的每个文件和文件夹" A / **"然后可能意味着:A中的每个文件和文件夹,以及直接位于A内的每个子项内的每个文件和文件夹。(基本上,/ *运算符的扩展遍历根文件夹的一个更深层次?又名" / **" =" / * / *")
我的"直接在"术语可能是错的。可能更好地说"直接孩子"或某事,但你明白了。
然后," A / ** / *"意思?是否等于" A / * / * / *" ?
虽然这看起来很基本,但当我没有对运营商的正式定义时,它会让人感到困惑。
我目前正在使用Javascript并尝试修改Gruntfile。但我想这些运营商可能出现在任何情况下。
答案 0 :(得分:6)
此行为不是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/*/f
,A/*/*/f
等等的每个中间数的等效性(当用作路径组件时)目录。
答案 1 :(得分:0)
如果您看到A/**/*
表示递归搜索文件夹A
下每个文件夹的树。有关更多信息,请查找基本的linux样式文件命令。