<!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN> <html> <head> <title>switch</title> </head> <body> <h1>switch</h1> <p>Команда выполняет один из нескольких скриптов в зависимости от полученного значения.</p> <h2>СИНТАКСИС</h2> <pre> <strong>switch</strong> ?<em>options</em>? <em>string</em> <em>pattern</em> <em>body</em> ?<em>pattern</em> <em>body</em>...? <strong>switch</strong> ?<em>options</em>? <em>string</em> {<em>pattern</em> <em>body</em> ?<em>pattern</em> <em>body</em>...?} </pre> <h2>ОПИСАНИЕ</h2> <p>Команда <strong>switch</strong> сравнивает аргумент <em>string</em> по очереди с каждым из образцов, заданных аргументами <em>pattern</em>. Если строка <em>string</em> соответствует очередному образцу, выполняется соответствующий скрипт <em>body</em> и команда возвращает результат его выполнения. Если последний из образцов равен <em>default</em>, то ему соответствует любая строка. Если строка не соответствует ни одному из образцов (что значит, в частности, что образец <em>default</em> отсутствует), то никакой скрипт не выполняется и команда возвращает пустое значение. </p> <p>Если один или несколько первых аргументов команды начинаются с <strong>-</strong>, они считаются опциями команды. Возможные опции перечислены ниже.</p> <dl> <dt><strong>-exact</strong></dt> <dd>Строка считается соответствующей образцу, только если она в точности с ним совпадает. Этот режим используется по умолчанию.</dd> <dt><strong>-glob</strong></dt> <dd>При сравнении строки с образцом используются те же правила, что и в команде <strong>string match</strong>.</dd> <dt><strong>-regexp</strong><dt> <dd>При сравнении строки с образцом используются те же правила, что и в команде <a href=regexp.html><strong>regexp</strong></a>.</dd> <dt><strong>--</strong></dt> <dd>Обозначает конец опций. Следующий аргумент считается строкой <em>string</em>, даже если он начинается с символа <strong>-</strong>.</dd> </dl> <p>Команда предполагает использование одной из двух синтаксических форм для задания образцов и скриптов. Первая использует отдельные аргументы для каждого образца и скрипта. Эта форма удобна при необходимости выполнить подстановки в образцах и/или скриптах. Во второй форме все они помещаются в один аргумент, который должен быть списком. Элементами этого списка должны быть, соответственно, образцы и скрипты. Эта форма более удобна для длинных команд, не размещающихся в одной строке, поскольку она не требует использовать обратный слэш в конце каждой строки. Но при ее использовании необходимо учитывать, что, поскольку список содержится в фигурных скобках, подстановки команд и переменных в образцах и скриптах не производятся. Вследствие этого результат выполнения команды, записанной в различных формах, может различаться.</p> <p>Если один из аргументов <em>body</em> равен <strong>-</strong>, это означает, что при совпадении строки с данным образцом будет выполняться скрипт <em>body</em> для следующего образца. Если для следующего образца скрипт также равен <strong>-</strong>, то будет использован скрипт для следующего за ним образца и т.д.</p> <p>Ниже приведены примеры использования команды <strong>switch</strong>.</p> <p>Команда</p> <pre> switch abc a - b {format 1} abc {format 2} default {format 3} </pre> <p>вернет значение 2.</p> <p>Команда</p> <pre> switch -regexp aaab { ^a.*b$ - b {format 1} a* {format 2} default {format 3} } </pre> <p>вернет значение 1.</p> <p>А команда</p> <pre> switch xyz { a - b {format 1} a* {format 2} default {format 3} } </pre> <p>вернет значение 3.<p> </body> </html>