TCL 提供三种形式的置换:变量置换、命令置换和反斜杠置换。每种置换都会导致一个或多个 单词本身被其他的值所代替。置换可以发生在包括命令名在内的每一个单词中,而且置换可以嵌 套。
变量置换(variable subtitution) 变量置换由一个$符号标记,变量置换会导致变量的值插入一个单词中。例如: %set y $x+100 //y 的值是 10+100,这里 x 被置换成它的值 10 10+100 这时,y 的值还不是我们想要的值 110,而是 10+100,因为 TCL 解释器把 10+100 看成是 一个字符串而不是表达式,y 要想得到值 110,还必须用命令置换,使得 TCL 会把 10+100 看 成一个表达式并求值。
命令置换(command substitution) 命令置换是由[]括起来的 TCL 命令及其参数,命令置换会导致某一个命令的所有或部分单词被 另一个命令的结果所代替。例如: %set y [expr $x+100] 110 y 的值是 110,这里当 TCL 解释器遇到字符'['时,它就会把随后的 expr 作为一个命令名,从 而激活与 expr 对应的 C/C++过程,并把'expr'和变量置换后得到的'10+110'传递给该命令过 程进行处理。 如果在上例中我们去掉[],那么 TCL 会报错。因为在正常情况下,TCL 解释器只把命令行中的 第一个单词作为看作命令,其他的单词都作为普通字符串处理,看作是命令的参数。 注意,[]中必须是一个合法的 TCL 脚本,长度不限。[]中脚本的值为最后一个命令的返回值, 例如: %set y [expr $x+100;set b 300] //y 的值为 300,因为 set b 300 的返回值为 300 300 有了命令置换,实际上就表示命令之间是可以嵌套的,即一个命令 的结果可以作为别的命令的参 数。
反斜杠置换(backslash substitution) TCL 语言中的反斜杠置换类似于 C 语言中反斜杠的用法,主要用于在单词符号中插入诸如换行 符、空格、[、$等被 TCL 解释器当作特殊符号对待的字符。例如: set msg multiple\ space //msg 的值为 multiple space。 如果没有'\'的话,TCL 会报错,因为解释器会把这里最后两个单词之间的空格认为是分隔符, 于是发现 set 命令有多于两个参数,从而报错。加入了'\'后,空格不被当作分隔符,'multiple space'被认为是一个单词(word)。又例如: %set msg money\ \$3333\ \nArray\ a\[2] //这个命令的执行结果为:money $3333 Array a[2] 这里的$不再被当作变量置换符。
本文介绍了TCL脚本中的三种置换方式:变量置换、命令置换和反斜杠置换。变量置换通过$标记,用于插入变量值;命令置换使用[],将命令执行的结果替换单词;反斜杠置换则用于插入特殊字符。通过这些置换,TCL解释器能够处理复杂的表达式和嵌套命令。
364

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



