Команда case исполняет один из нескольких
скриптов в зависимости от полученного значения.
СИНТАКСИС case string?in? patList body?patList
body...?
casestring?in?
{patList body? body...?}
ОПИСАНИЕ Замечание. Команда
case - устаревшая, она поддерживается только для совместимости с
предыдущими версиями. В последующих версиях она может быть опущена. Поэтому
предпочтительнее использование командыswitch.
Команда сравнивает string со всеми аргументами
patList по очереди. Каждый аргумент patList представляет собой
один или несколько (список) образцов. Если string соответствует одному
из образцов, то case рекурсивно вызывает интерпретатор Tcl, передает
ему следующий за этим списком образцов скрипт body для выполнения и возвращает
результат этого выполнения. Каждый аргумент patList состоит из одного
или нескольких образцов. Каждый образец может содержать спецсимволы, как в команде
string match. Кроме того, есть специальный
образец default. Соответствующий ему скрипт выполняется, если string
не соответствует никакому другому образцу.
Если string не соответствует ни одному из
образцов, а образец default не используется, то case вернет пустую
строку.
У команды есть две формы записи для аргументов
patList и body. Первая использует отдельные аргументы для каждого
шаблона и команды. Эта форма более удобна, если в образцах или командах желательно
выполнить какие-либо подстановки. Во второй форме все шаблоны и команды объединены
в один аргумент, который должен быть списком, состоящим из шаблонов и команд.
Вторая форма позволяет проще записывать многострочные команды, поскольку при
этом фигурные скобки вокруг списка позволяют не ставить обратный слеш в конце
каждой строки. Однако из-за этих фигурных скобок подстановки в шаблонах и командах
не производятся. Поэтому одна и та же команда, записанная в различных формах,
может работать по-разному.