tcl/tk参考——字符串subst

名称

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
  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值