|
楼主 |
发表于 2020-4-14 16:27
|
显示全部楼层
TCL变量
7 D* w& z) U& s! I) dTCL只支持一种数据类型:字符串(string)。所有的命令,命令的所有的参数,命令的结果,所有的变量都是字符串。TCL变量根据其结构的复杂程度分为“简单变量”和“数组变量”两类。% T/ C5 p& V4 a* H. Z1 `
1.简单变量$ r3 Y/ _! b: B# J2 F+ ]
一个TCL的简单变量包含两个部分:名字和值,其中名字和值都可以是任意字符串。不过为了更好的使用变量置换功能,变量名最好按C\C++语言中标识符的命名规则命名。这是因为TCL解释器在分析一个变量置换时,只把从$符号往后直到第一个不是字母、数字或下划线的字符之间的单词符号作为要被置换的变量的名字。例如:, O, B; w) S! Y
set a 2/ }0 G' q! N5 h/ W* X, [/ r
set a.1 5& R% x- B$ t- U
set b $a.1
# S6 F& \; S, ~2 @7 x- ?在最后一个命令行,我们希望把变量a.1的值付给b,但是TCL解释器在分析时只把$符号之后直到第一个不是字母、数字或下划线的字符(这里是'.')之间的单词符号(这里是'a')当作要被置换的变量的名字,所以TCL解释器把a置换成2,然后把字符串“2.1”付给变量b。这显然与我们的初衷不同。当然,如果变量名中有不是字母、数字或下划线的字符又要用变量置换,可以用花括号把变量名括起来。例如:. V" s0 _/ V2 r4 m8 A
. R, J0 F! ]# }0 s9 sset b ${a.1}
. E# r1 A! v- _ ?2.数组变量
4 U9 ~$ O6 l; R7 N8 B) H! w5 F数组是一些元素的集合。TCL的数组和一般编程语言中的数组有很大的区别。在TCL中,不能单独声明一个数组,数组只能和数组元素一起声明。数组中数组元素的名字包含两部分:数组名和数组中元素的名字,TCL中数组元素的名字(下标)可以为任何字符串。
. s2 U6 x6 ?* }- [- ]% e; f例如:
* H4 n* S3 K3 s5 `. k* |6 t6 p3 cset day(Monday) 1 9 t0 j! j* U, z' B! E- c6 X+ M
set day(Tuesday) 25 C$ w/ |. a9 `7 n5 H' z
第一个命令生成一个名为day的数组,同时在数组中生成一个名为Monday的数组元素,并把值置为1,第二个命令生成一个名为Tuesday的数组元素,并把值置为2。
[8 r$ R: Q: G# g+ ~5 t+ G) p0 ~在数组元素的置换中,除了有括号之外,数组元素的置换和简单变量类似。例如:
" ]. x2 c$ [ I% n, a
7 P# i3 P' Z( Gset a Monday# V" z7 z1 H0 O7 b3 i" c- e5 N
set day(Monday) 1
# c* B4 U0 N" y5 K! u aset b $day(Monday) //b的值为1,即day(Monday)的值。
. Q, M" i( }: A3 H b$ x* Jset c $day($a) //c的值为1,即day(Monday)的值。
- n8 [$ f, Z" w2 T* k1 S3 q& Y# a9 _- ?$ B$ O1 X
9 m" C; e" O" s+ p6 J
3.相关指令
6 C3 ^0 {) D! A* c(1)set 指令:TCL 的变量可以随时建立不用事先宣告,变量名称的取法也没有任何限制,所以可以使用任何字符来为变量命名,甚至变量名和指令名称相同也没问题。使用时只有一点要注意的就是 TCL 是大小写有区别的语言。通常,我们以 set 指令来设定变量值:4 |# s% J7 I, E2 n! k7 {. @. k
set x 5
! ^. n/ Z2 z5 p! }set y 6
+ }6 U$ I9 W% X; C5 d. q2 cset PI 3.14
8 w; I& p7 J# Y0 p( W, Kset PI*2 6.28 ;# 注意!变量名称是 PI*20 g$ w! N: Q+ R" f
puts $PI*2) q. T- p" P1 g' h% o
set PI+ T1 u% _# f( g- ?! {8 F
TCL 的 set 指令除了有设定变量值的用途外,也可以用来取出变量的内容,如上列程序最后一行使用 set 指令取出 PI的值 (注意!这边不用在变量名称前加上 $ 符号)。
, c9 X1 ~+ c5 I3 i- j(2)unset 指令用来删除一个或多个变量,来释放内存空间:" a' V- ~1 x5 R0 Y7 ~, p
unset x y PI3 a1 t% Z- x$ N$ a$ C$ K$ J
! A! s7 c7 _) k! ?. x
7 q8 K6 _# C$ k* l1 ~
|
|