名称
subst - 完成反斜线、命令和变量替换语法
subst ?-nobackslashes? ?-nocommands? ?-novariables? string描述
这个命令对string变元执行变量、命令和反斜杠替换,然后返回替换后的结果,替换的方式和执行Tcl命令的方式相同,string变元被替换两次,一次为Tcl命令的剖析器,另外一次为subst命令。如果指定了-nobackslashes、-nocommands或-novariables标志位,那么相应的替换将不会执行,比如如果指定了-nocommands标志位,命令替换就不会发生,中括号被当作为普通字符处理。
注意一种替换可以包含其他类型的替换,比如,当指定-novariables标志位,命令替换将会执行,这意味着任何完成命令需要进行的变量替换依然会发生。同样的,即使指定了-nocommands命令,任何完成变量替换需要进行的命令替换也会发生。
如果在替换的过程中发生错误,subst命令返回错误。如果一个在命令替换或变量替换时发生break异常,替换返回的结果就是出现异常发生之前已经替换成功的字符串,如果一个在命令替换或变量替换时发生continue异常,这部分命令替换将返回一个空字符串,然后它之前和之后替换的字符串一起返回。如果一个在命令替换或变量替换时返回一个return异常,这部分命令替换将返回return返回的代码,然后它之前和之后替换的字符串一起返回。
示例
下面的替换,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 {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中的subst命令,该命令用于执行字符串中的变量、命令及反斜杠替换。文章解释了如何使用-nobackslashes、-nocommands和-novariables选项来控制替换行为,并通过多个示例演示了不同情况下subst命令的工作原理。
1万+

被折叠的 条评论
为什么被折叠?



