Кто-нибудь может это объяснить:
$ 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}