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.

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

Interesting Posts

Можно ли переключиться на другой процесс на другом терминале tty # с терминала ssh?

Имитировать x-экран?

Подстановочные знаки: как я могу перечислить файлы, заканчивающиеся на `.txt`, только без использования символа точки?

Таблица использования процессора консоли

Замените оба диска в зеркале рейда 1

Откройте список URL-адресов на вкладке ACTIVE в Opera.

Способ Unix для отправки / передачи необработанного Ethernet-фрейма

Не удалось отобразить содержимое каталога: процесс бесконечно бесконечно

Как сделать замену sed (s /// g) на основе списка? Мне нужно поменять несколько слов, с другими соответствующими словами

clonezilla – восстановить образ раздела ОС ОС Windows для большего / меньшего раздела

Как ssh на сервер с использованием другого сервера?

Позиционные параметры вызывающего абонента функции

Как использовать Xfig на высоком экране DPI?

Уменьшение максимального объема звука без уменьшения базового объема

systemd // не удалось с результатом "зависимость"

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