LINUX.ORG.RU

Скобки в шаблоне case

 bash case regexp


0

0

приветствую. Имеется следующая конструкция:

VIND='12 2 12 3 12' #(или '5-78' или all)
case $VIND in
 all) echo '$VIND=all' ;;
 ^[0-9]+-[0-9]+$) echo '$VIND is interval'  ;;
 ^([0-9]+ )*[0-9]+$) echo '$VIND is list' ;;
 *) ;;
esac

Проблема в том, что реагирует case только на all. Плюс к этому, в случае, когда переменная представлена списком из цифр, баш воспринимает первую же ")", как часть конструкции case.

Я правильно понимаю, что составил слишком сложную конструкцию и case её не переваривает?

1. А bash давно регулярки в case понимает?

2. Из Bash Reference Manual:

Each pattern undergoes tilde expansion, parameter expansion, command substitution, and arithmetic expansion.

Так что $ как минимум надо экранировать.

Begemoth ★★★★★
()

См. раздел «Pattern Matching» в bash(1).
Особенно «extglob» ('shopt -o extglob').

ABW ★★★★★
()

Как уже упомянули - используются обрезанный regexp-ы, известные как globbing.

Можно внешнюю команду запустить, например: expr <string> : <regexp> (ну и if-ы вместо case).

anonymous
()

Я правильно понимаю, что составил слишком сложную конструкцию и case её не переваривает?

Я правильно понимаю, что документацию ты принципиально не читаешь, а «изучаешь» bash «по-ЛОРу», как и ещё дюжина здешних школьников?

anonymous
()
Ответ на: комментарий от anonymous

Можно внешнюю команду запустить, например: expr <string> : <regexp> (ну и if-ы вместо case).

благодарю, сделал в итоге через awk определение новой переменной в зависимости от VIND

всем остальным тоже спасибо

Felixoid
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.