Когда я хочу для перебора файлов каталога (например, каталога Runfirstall
) я обычно делаю:
for folder in $DIR/Runfirstall/*
Однако я нашел следующее предложение в каком-то коде:
for folder in $DIR/!(Runfirstall)/
Это то же самое?
Нет, если установлена опция оболочки extglob
, то вторая перебирает все каталоги, которые не названы Runfirstall
Из man bash
:
Если опция оболочки extglob включена с помощью встроенного модуля shopt, распознаются несколько расширенных операторов сопоставления с образцом. В следующем описании список шаблонов представляет собой список из одного или нескольких шаблонов, разделенных символом
|
. Составные шаблоны могут быть сформированы используя один или несколько следующих подшаблонов:?(pattern-list) Сопоставляет ноль или одно вхождение заданных шаблонов *(pattern-list) Совпадает с нулем или более вхождений заданных деталей +(pattern-list) Сопоставляет одно или более вхождений заданных деталей @(список деталей) Сопоставляет один из заданных шаблонов !(список шаблонов) Идентифицирует все, кроме одного из заданных шаблонов