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.

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

  • можно ли открывать файлы в подкаталогах с меньшим?
  • Почему не работает эта команда sudo mv с шаблоном?
  • запуск vim с заменой команды
  • Показывать только скрытые файлы (файлы точек) в псевдониме ls
  • Удалите все файлы отмены Vim во всех, кроме одного каталога
  • Как повторно использовать шаблон файла в .gitignore в bash / zsh?
  • Регулярное выражение для проверки только чисел присутствует после подчеркивания не символов
  • Почему `find -name * .jks` не возвращает некоторые файлы?
  • One Solution collect form web for “Bash: Синтаксическая ошибка при @ ()”

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

    Interesting Posts
    Linux и Unix - лучшая ОС в мире.