Spec-Zone.ru › Tcl/Tk

subst

Имя

subst — Выполнение подстановок обратной косой черты, команд и переменных

Синтаксис

subst ?-nobackslashes? ?-nocommands? ?-novariables? строка

Описание

Эта команда выполняет подстановки переменных, команд и обратной косой черты в аргументе строка и возвращает полностью подставленный результат. Подстановки выполняются точно так же, как и для команд Tcl. В результате, аргумент строка фактически подставляется дважды: один раз парсером Tcl обычным способом для команд Tcl и еще раз командой subst.

Если указаны какие-либо из -nobackslashes, -nocommands или -novariables, соответствующие подстановки не выполняются. Например, если указан -nocommands, подстановка команд не выполняется: открывающие и закрывающие скобки обрабатываются как обычные символы без специальной интерпретации.

Обратите внимание, что подстановка одного типа может включать подстановку других типов. Например, даже когда указан параметр -novariables, подстановка команд выполняется без ограничений. Это означает, что любая необходимая подстановка переменных для завершения подстановки команды все равно будет выполнена. Аналогично, любая необходимая подстановка команды для завершения подстановки переменной будет выполнена, даже если указан параметр -nocommands. См. ПРИМЕРЫ ниже.

Если при подстановке произошла ошибка, subst вернёт эту ошибку. Если во время подстановки команды или переменной произошла ошибка break, результатом всей подстановки будет строка (с подстановками) до начала подстановки, вызвавшей ошибку. Если во время вычисления подстановки команды или переменной произошла ошибка continue, для этой команды или подстановки переменной будет подставлена пустая строка (при условии, что она имеет правильный синтаксис Tcl). Если произошла ошибка return или любое другое возвращённое значение во время подстановки команды, то возвращённое значение подставляется вместо этой подстановки. См. ПРИМЕРЫ ниже. Таким образом, все исключительные возвращаемые коды «перехватываются» командой subst. Команда subst сама либо вернёт ошибку, либо завершит работу успешно.

Примеры

При выполнении подстановок subst не применяет никакого специального обращения к двойным кавычкам или фигурным скобкам (за исключением подстановок команд), поэтому скрипт
set a 44
subst {xyz {$a}}

вернёт «xyz {44}», а не «xyz {$a}», и скрипт

set a "p\} q \{r"
subst {xyz {$a}}

вернёт «xyz {p} q {r}», а не «xyz {p\} q \{r}».

При выполнении подстановки команды она включает любые необходимые подстановки переменных для оценки скрипта.

set a 44
subst -novariables {$a [format $a]}

вернёт «$a 44», а не «$a $a». Аналогично, при выполнении подстановки переменной она включает любые необходимые подстановки команд для получения значения переменной.

proc b {} {return c}
array set a {c c [b] tricky}
subst -nocommands {[b] $a([b])}

вернёт «[b] c», а не «[b] tricky».

Ошибки continue и break позволяют командам подстановки предотвратить подстановку остальной части подстановки команды и остальной части строки соответственно, предоставляя авторам скриптов больше возможностей при обработке текста с помощью subst. Например, скрипт

subst {abc,[break],def}

вернёт «abc,», а не «abc,,def», и скрипт

subst {abc,[continue;expr {1+2}],def}

вернёт «abc,,def», а не «abc,3,def».

Другие исключительные возвращаемые коды подставляют возвращённое значение

subst {abc,[return foo;expr {1+2}],def}

вернёт «abc,foo,def», а не «abc,3,def», и

subst {abc,[return -code 10 foo;expr {1+2}],def}

также вернёт «abc,foo,def», а не «abc,3,def».

См. также

Tcl, eval, break, continue

Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TclCmd/subst.htm

Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TclCmd/subst.htm

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API