Они не абсолютно одинаковы, и оба они потенциально могут дать разные результаты - обратитесь к glob primer для получения дополнительной информации.В нем говорится:
+(pattern|pattern|pattern)
Соответствует одному или нескольким экземплярам предоставленных шаблонов.
Ваш второй шаблон;images/**/*.+(png|svg)
, будет соответствовать одному или нескольким вхождениям из png
или svg
в конце имени файла.
Впрочем, ваш первый паттерн;images/**/*.{png,svg}
, будет соответствовать только при наличии одного вхождения из png
или svg
в конце имени файла.
Пример:
Допустим, у нас есть четыре файла с именем:
foo.svg
foo.svgsvg
foo.png
foo.pngpngpng
и их пути:
.
├── images
│ ├── ...
│ └── quux
│ ├── foo.svg
│ ├── foo.svgsvg
│ ├── foo.png
│ └── foo.pngpngpng
Сопоставленные результаты
Учитывая ваши два примера шаблонов -ваш первый образец;images/**/*.{png,svg}
, будет соответствовать только следующим двум путям:
images/quux/foo.svg
images/quux/foo.png
Примечание: пути кфайлы foo.svgsvg
и foo.pngpngpng
были проигнорированы
Однако ваш второй шаблон;images/**/*.+(png|svg)
будет соответствовать всем четырем путям к файлам, а именно:
images/quux/foo.svg
images/quux/foo.svgsvg
images/quux/foo.png
images/quux/foo.pngpngpng
"Когда я проверяю их, они обычно дают одинаковый результат."
Это потому, что маловероятно, что у вас когда-либо былфайл с расширением, например .pngpng
или .svgsvgsvg
(т. е. когда он имеет более одного вхождения png
или svg
в конце).Также маловероятно, что вы когда-либо это сделаете.
Однако я рекомендую вам использовать первый шаблон глобуса, то есть images/**/*.{png,svg}
, поскольку он более лаконичен тому, что вы на самом деле хотите сопоставить.