变量置换

除了直接给变量赋值之外,另一种常见情形是把某个变量的值赋给另外一个变量。例如,变量x的值为1,我们期望变量y的值是x+2也就是3。采用如下代码,最终发现y的结果是x+2,并不是期望值3。这里就涉及到变量置换

 

在Tcl中,变量置换通过$(美元符号)完成。看一个简单的例子。变量x值为3,如果需要把变量x的值赋给变量y,就需要通过$x来完成,如下图所示代码 :

是不是所有的变量,只要通过符号$都可以完成变量置换呢?看一个简单的例子。变量名为a-b-c,变量值为字符串”Hello”,我们需要把变量mystr的值设置为变量a-b-c的值。但通过$置换时,显示变量a不存在。由此可见,Tcl把中划线当作了字符串分割符。此时,可通过{}把变量名a-b-c括起来,使Tcl解释器把它当作一个整体对待,就可以正确实现变量置换 :

 

类似地,对于英文句号“.”,Tcl解释器也会当作字符串分割符,但对于下划线或者以数字开头的变量名则不会出现这样的问题。如果并不清楚Tcl解释器是否会把变量名作为整体对待,谨慎起见,用{}把变量名括起来 :

借助变量置换,很容易完成字符串拼接,例如,变量a为5,变量b为6,给变量c赋值56,这可通过$a$b完成,如下图所示:

 

再例如,变量x为LUT,需要把变量lut_type设置为LUT6,也就是字符串LUT和字符6拼接在一起。如果直接使用$x6就会报错,Tcl解释器会把x6当作一个变量,但该变量并未事先定义,所以会显示该变量不存在。此时,需要通过花括号{}把变量x括起来,外加$符号完成变量置换 :

本质上,$var是[set var]的缩写版本。通过如下例子可以看出,set后面如果只有一个参数,而这个参数又是一个已经定义的变量名,那么该命令就直接返回该变量的变量值,与$var等价

 

结论:

-Tcl中通过美元符号$完成变量置换

-对于包含特殊符号的变量名,可通过${VarName}的方式保证正确置换

猜你喜欢

转载自blog.csdn.net/bleauchat/article/details/89010888