Что такое ** глобус?

87

У меня есть этот путь в моем файле реакции gulpfile:

var path = {
  HTML: 'src/index.html',
  ALL: ['src/js/*.js', 'src/js/**/*.js', 'src/index.html'],
  JS: ['src/js/*.js', 'src/js/**/*.js'],
  MINIFIED_OUT: 'build.min.js',
  DEST_SRC: 'dist/src',
  DEST_BUILD: 'dist/build',
  DEST: 'dist'
};

Что такое двойной шар?

Я знаю, что такое одиночный шар ... но что такое двойной? один шар

Jwan622
источник

Ответы:

101

Это почти то же самое, что и одиночная звездочка, но может состоять из нескольких уровней каталогов.

Другими словами, while /x/*/yбудет соответствовать таким записям, как:

/x/a/y
/x/b/y

и так далее (только с одним уровнем каталога в разделе подстановочных знаков), двойная звездочка также/x/**/y будет соответствовать таким вещам, как:

/x/any/number/of/levels/y

с концепцией «любое количество уровней», включая ноль (другими словами, /x/**/yбудет соответствовать /x/yкак один из вариантов).


В стороне, как бы я ни ненавидел приписывать что-либо мэйнфрейму , я считаю, что это использовалось с первых дней MVS, чтобы разрешить выбор наборов данных на нескольких уровнях :-)

Paxdiablo
источник
2
Это не имеет никакого смысла. Если * обозначает 0 или более символов, то этот шаблон потенциально может соответствовать / x // y, что бессмысленно. На самом деле вы говорите «любое количество символов, за которым следует любое количество символов». Разве это не просто ... о, я не знаю ... любое количество символов ???
AleksandrH
7
@AleksandrH, нет, это не регулярное выражение в обычном смысле слова: нет соответствия символов, только имена каталогов. Это специально для иерархических файловых систем. По вашему первому пункту, если бы пустые имена каталогов были разрешены, /x//yбыло бы совершенно правильно. Однако я никогда не видел файловую систему, которая позволяла бы это. Что касается вашего второго пункта, *средства соответствуют «любому имени каталога, только один уровень» (поэтому не выходят за пределы следующего /разделителя), а **означает «сопоставить любое количество уровней с любым именем каталога на каждом уровне» (может пересекаться столько /разделители по мере необходимости).
paxdiablo
9
Стоит отметить , что для /x/**/y/, /x/y/также включен, который аккуратно.
Yassine Imounachen
24

Обычно он используется для обозначения любого количества подкаталогов. Так

src/js/**/*.js

Подойдет

src/js/files/*.js
src/js/more-files/*.js

etc
etc
Шон
источник
8
Единственная звездочка также соответствует вашим примерам. Я думаю, вы хотели включить дополнительный подкаталог во второй пример.
Саймон Ист
1
@SimonEast нравится? src / js / files / controllers / user.js, src / js / files / models / foo / var.js
AutumnSky
21

**соответствует любому символу, включая косую черту, /
*соответствует любому символу, кроме косой черты (для соответствия только имени файла или каталога)

Томас С.
источник