<!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>