为什么我的 bash 模式匹配在 'piped' 通过 nodejs exec 时无法正常工作?

Why does my bash pattern match not work properly when 'piped' through nodejs exec?

我正在 运行正在执行 git bash (windows)

上的命令
paste --delimiter=\n --serial src/libs/**/*[^.spec].js > test.js

使用 shopt:

globstar on
extglob on

这成功地从 src/libs 开始递归连接了所有 js 文件,但从终端执行时所有 *.spec.js 文件除外。

然而,当我通过 g运行t-shell (https://github.com/sindresorhus/grunt-shell) 运行 这个命令时,它也有效,但是:[^.spec] 被忽略了。意味着我所有的 *.spec.js 文件也进入 test.js。

对于 extglob(和 globstar),以下语法是正确的,其他 [^..] 是负字符集。

paste --delimiter=\n --serial src/libs/**/!(*.spec).js > test.js

否则可以用find

find src/libs -name '*.js' ! -name '*.spec.js' -exec paste --delimiter='\n' --serial {} + > test.js

有区别吗
find src/libs ! -name '*.spec.js' -name '*.js' -exec cat {} + > test.js