bash: проблемы с отрицанием глобуса и множеством шаблонов - PullRequest
0 голосов
/ 11 декабря 2018

Я пытаюсь написать шаблон глобуса, который возвращает список файлов, которые не заканчиваются одним из 2 возможных суффиксов: готово и ежемесячно

Список файлов в моей тестовой директории:

foo.done
foo.montly
foo.pdf
foo.txt

Я вполне успешен, если выполняю отрицание только для одного суффикса:

ls  !(*done) or ls  !(*monthly)

Однако, когда я попробовал что-то вроде этого:

ls  !({*monthly,*done})

, я получаю это:

foo.done
foo.monthly
foo.pdf
foo.pdf
foo.txt
foo.txt

Может кто-нибудь помочь мне понять результат, который не только не дает того, что я хочу с точки зрения отрицания, но также перечисляет дубликаты!

1 Ответ

0 голосов
/ 11 декабря 2018

Используйте | для разделения шаблонов в списке шаблонов ( docs ):

Если опция оболочки extglob включена с помощью встроенной функции shopt, несколько расширенных сопоставлений шаблоновоператоры признаны.В последующем описании список шаблонов представляет собой список из одного или нескольких шаблонов, разделенных символом '|'.

Результат:

$ shopt -s extglob

$ ls
foo.done  foo.monthly  foo.pdf  foo.txt

$ ls *.!(monthly|done)
foo.pdf  foo.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...