Назад | Перейти на главную страницу

Bash Extended Globbing дает синтаксическую ошибку

Кто-нибудь может это объяснить:

$ bash
$ shopt -s extglob
$ ls *.(txt|doc)
bash: syntax error near unexpected token `('
$ shopt extglob
extglob         on

Это сжатая установка debian. Я ожидаю, что extglob интерпретирует скобки как начало группы.

Спасибо,

Павел

Потому что extglob так не работает. Вы должны поместить один из символов-модификаторов в начало списка шаблонов ((txt|doc) в данном случае) следующим образом (из man bash):

          ?(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

В частности, ls *.*(txt|doc) производит поведение, которое, как я полагаю, вам нужно.

Вы можете сделать это без расширенного подстановки, используя расширение скобки: ls *.{txt,doc}