Динамические операторы в Bash - PullRequest
1 голос
/ 20 октября 2011

Как мне написать:

PreviousInput='@(User1 | User2 | User3)*#channel'
###############################
Expression="*${PreviousInput}*"
case $Input in
    $Expression ) 
        Do_Something ;;
    *)
        Do_Something_Else ;;
esac

Мне бы очень хотелось использовать оператор case, потому что я уже вложил много логики в оператор case и действительно не хочу его переписывать. Я думал, что каким-то образом я мог бы использовать шаблоны глобуса, но на самом деле не знаю, как бы я это сделал. Какие-либо предложения? Любая помощь приветствуется.

1 Ответ

0 голосов
/ 01 ноября 2011

Руководство по bash гласит:

Каждый проверенный шаблон расширяется с использованием расширения тильды, расширения параметров и переменных, арифметического замещения, подстановки команд и замещения процесса.

Поэтому я не вижу никакой причины, по которой ваш пример не должен быть в точности эквивалентен

case $Input in
    *@(User1 | User2 | User3)*#channel* ) 
        Do_Something ;;
    *)
        Do_Something_Else ;;
esac

, который должен делать то, что вы хотите, если у вас установлен shopt -s extglob, как говорит shellter.

...