Bash: Синтаксическая ошибка при @ ()

У меня есть следующая функция в моем файле .bashrc :

 extract() { local cei (($#)) || return for i; do c='' e=1 if [[ ! -r $i ]]; then echo "$0: file is unreadable: \`$i'" >&2 continue fi case $i in *.t@(gz|lz|xz|b@(2|z?(2))|a@(z|r?(.@(Z|bz?(2)|gz|lzma|xz))))) c='bsdtar xvf';; *.7z) c='7z x';; *.Z) c='uncompress';; *.bz2) c='bunzip2';; *.exe) c='cabextract';; *.gz) c='gunzip';; *.rar) c='unrar x';; *.xz) c='unxz';; *.zip) c='unzip';; *) echo "$0: unrecognized file extension: \`$i'" >&2 continue;; esac command $c "$i" e=$? done return $e } 

теперь это отлично работает для меня в моей нынешней системе Arch Linux. Недавно я установил новый дистрибутив void-linux и попытался использовать мой старый .bashrc на нем.

Однако на Void-Linux эти функции вызывают ошибку:

 syntax error near unexpected token '(' 

и указывает на эту строку:

 *.t@(gz|lz|xz|b@(2|z?(2))|a@(z|r?(.@(Z|bz?(2)|gz|lzma|xz))))) 

Некоторое исследование вернуло, что Bash на этом дистрибутиве отказывается читать шаблон @ () и, следовательно, возвращает ошибку. Я помню, что пару месяцев назад использовал ту же функцию в системе Debian Stable.

Может ли кто-нибудь указать, почему этот код не выглядит портативным? А где ошибка?

One Solution collect form web for “Bash: Синтаксическая ошибка при @ ()”

Как упоминалось в моем комментарии, это распространенная ошибка, которую люди видят при попытке использовать расширенные globs ( shopt -s extglob ) перед включением опции. Сюда входят определения функций.

  • Работа rm / ls с
  • Результат echo * и echo. *
  • Bash скрывает скрытые файлы
  • Найти файлы, которые не находятся в .gitignore
  • Цикл forach для вывода ls
  • Получите количество файлов, которые соответствуют шаблону в каталоге, и удалите самый старый
  • Как удалить все в каталоге?
  • Как я могу назначить вывод команды переменной оболочки?
  • Список всех моих файлов, измененных больше, чем X дней назад, в длинном формате
  • Количество файлов в каталоге, начиная с определенного текста
  • Удалите все файлы отмены Vim во всех, кроме одного каталога
  • Как проверить, существует ли несколько файлов?
  • Linux и Unix - лучшая ОС в мире.