Команда выполняет один из нескольких скриптов в зависимости от полученного значения.
      switch ?options? string pattern body ?pattern body...?
      switch ?options? string {pattern body ?pattern body...?}
    
    Команда switch сравнивает аргумент string по очереди с каждым из образцов, заданных аргументами pattern. Если строка string соответствует очередному образцу, выполняется соответствующий скрипт body и команда возвращает результат его выполнения. Если последний из образцов равен default, то ему соответствует любая строка. Если строка не соответствует ни одному из образцов (что значит, в частности, что образец default отсутствует), то никакой скрипт не выполняется и команда возвращает пустое значение.
Если один или несколько первых аргументов команды начинаются с -, они считаются опциями команды. Возможные опции перечислены ниже.
Команда предполагает использование одной из двух синтаксических форм для задания образцов и скриптов. Первая использует отдельные аргументы для каждого образца и скрипта. Эта форма удобна при необходимости выполнить подстановки в образцах и/или скриптах. Во второй форме все они помещаются в один аргумент, который должен быть списком. Элементами этого списка должны быть, соответственно, образцы и скрипты. Эта форма более удобна для длинных команд, не размещающихся в одной строке, поскольку она не требует использовать обратный слэш в конце каждой строки. Но при ее использовании необходимо учитывать, что, поскольку список содержится в фигурных скобках, подстановки команд и переменных в образцах и скриптах не производятся. Вследствие этого результат выполнения команды, записанной в различных формах, может различаться.
Если один из аргументов body равен -, это означает, что при совпадении строки с данным образцом будет выполняться скрипт body для следующего образца. Если для следующего образца скрипт также равен -, то будет использован скрипт для следующего за ним образца и т.д.
Ниже приведены примеры использования команды switch.
Команда
      switch abc a - b {format 1} abc {format 2} default {format 3}
    
    вернет значение 2.
Команда
      switch -regexp aaab {
      	^a.*b$ -
        b {format 1}
        a* {format 2}
        default {format 3}
      }
    
    вернет значение 1.
А команда
      switch xyz {
      	a
        -
        b
        {format 1}
        a*
        {format 2}
        default
        {format 3}
      }
    
    вернет значение 3.