Какова цель shopt -s extglob

15

Я хотел удалить все файлы из каталога, кроме одного. Я нашел свое решение здесь . Это решение использует команду

shopt -s extglob

Я хотел знать, что именно делает эта команда, некоторые базовые знания. Я также добавил комментарий к этому ответу, но до сих пор не получил ответа. Как новый пользователь Ubuntu, мне любопытно узнать, что делает эта команда.

Хаммад Хасан
источник

Ответы:

16

Проще говоря, глобирование относится к сопоставлению с образцом. Bash использует простую глобализацию, echo l*которая расширяется до списка файлов в текущей директории, которые начинаются с буквы l. Конечно, как вы можете догадаться, это просто и ограничено.

Введите extglob. Как вы можете догадаться, это означает extended globbing. Эта опция позволяет более сложное сопоставление с образцом. От man bash:

extglob If set, the extended pattern matching features described
        above under Pathname Expansion are enabled.

И немного до этого:

If the extglob shell option is enabled using the shopt builtin, several
extended pattern matching operators are recognized.  In  the  following
description, a pattern-list is a list of one or more patterns separated
by a |.  Composite patterns may be formed using  one  or  more  of  the
following sub-patterns:

      ?(pattern-list)
             Matches zero or one occurrence of the given patterns
      *(pattern-list)
             Matches zero or more occurrences of the given patterns
      +(pattern-list)
             Matches one or more occurrences of the given patterns
      @(pattern-list)
             Matches one of the given patterns
      !(pattern-list)
             Matches anything except one of the given patterns

Есть множество способов, которыми extglobможно использовать. Несколько хороших примеров приведены в Linux Journal и вики Грега .

Сергей Колодяжный
источник