составные шаблоны внутри операторов bash case

#bash

#bash

Вопрос:

Я не могу получить составные шаблоны, как описано в http://www.gnu.org/software/bash/manual/bashref.html#Pattern-Matching чтобы соответствовать внутри моего заявления по делу:

 i=33; case $i in *([A-Za-z0-9]) ) echo "alphanumeric";; * ) echo "bah";; esac;
 

Я бы ожидал, что приведенный выше скрипт отобразит «буквенно-цифровой», но вместо этого он завершается с:

 bash: syntax error near unexpected token `('
 

Есть идеи, что не так?

Ответ №1:

Попробуйте включить опцию extglob оболочки следующим образом:

 shopt -s extglob
 

Затем вы можете использовать расширенные операторы сопоставления с образцом:

 i='33'; case $i in *([A-Za-z0-9]) ) echo "alphanumeric";; * ) echo "bah";; esac;
 

Со справочной страницы:

extglob — если задано, включены расширенные функции сопоставления с образцом, описанные выше в разделе Расширение имени пути.

Комментарии:

1. Работает как шарм, спасибо! Это было прямо у меня перед глазами с самого начала…