这个通配符是什么意思?

What does this wildcard mean?

我有一个包含多个命令的 grunt 文件。其中一部分是一位离开的同事写的,但我们找不到确切的解释。

它做了它应该做的事情,但我们不知道它到底是什么:)

这是代码:

dist: {
    files: [{
        expand: true,
        cwd: '<%= config.tmp %>/styles/',
        src: '{,**/}*.css',
        dest: '<%= config.tmp %>/styles/'
    }]
}

我们不确定的部分是第 5 行的 {,**/}

来自the documentation

{} allows for a comma-separated list of "or" expressions

因此,

'{,**/}*.css',

将匹配 *.css**/*.css

大括号内的第一个模式是 冗余,因为第二个模式应该已经匹配 current/root 目录中的 .css 文件。

A great answer by sotirios-delimanolis:

When to use ** (double star) in glob syntax within JAVA

简而言之,如果您使用一颗星,那么嵌套路径将被忽略:

/a/a/a.css - 忽略

花括号里面的逗号就是这样files/directories里面的逗号不会被忽略:

dsadsad,dasdsadas/a.css

{,**/}*.css 该模式内的大括号表示称为大括号扩展的功能。内部 grunt is using Minimatch library which supports that feature. List of comma separated patterns inside them will be expanded first into two patterns *.css and **/*.css in your case. You can test your pattern using globster.xyz