|
楼主 |
发表于 2020-4-14 16:26
|
显示全部楼层
TCL变量
# k' ?# B, X3 M- r+ Q6 lTCL只支持一种数据类型:字符串(string)。所有的命令,命令的所有的参数,命令的结果,所有的变量都是字符串。TCL变量根据其结构的复杂程度分为“简单变量”和“数组变量”两类。
$ q; w& t: v# g8 C4 W& M1.简单变量$ ?7 z/ s2 @% `# X% D
一个TCL的简单变量包含两个部分:名字和值,其中名字和值都可以是任意字符串。不过为了更好的使用变量置换功能,变量名最好按C\C++语言中标识符的命名规则命名。这是因为TCL解释器在分析一个变量置换时,只把从$符号往后直到第一个不是字母、数字或下划线的字符之间的单词符号作为要被置换的变量的名字。例如:8 ?, c4 {- ]$ ?1 p1 B
set a 2
8 Q- b* f- c' }* a/ cset a.1 59 \. }$ `$ ]" D1 H4 A
set b $a.1
; ? G/ C0 K0 o- h9 S8 P" s- W5 n# G8 e1 m* s# x
在最后一个命令行,我们希望把变量a.1的值付给b,但是TCL解释器在分析时只把$符号之后直到第一个不是字母、数字或下划线的字符(这里是'.')之间的单词符号(这里是'a')当作要被置换的变量的名字,所以TCL解释器把a置换成2,然后把字符串“2.1”付给变量b。这显然与我们的初衷不同。当然,如果变量名中有不是字母、数字或下划线的字符又要用变量置换,可以用花括号把变量名括起来。例如:
, U$ `, f# m3 h3 T" A5 Aset b ${a.1}1 O5 ?, z. b l! e7 @6 L7 [0 q; _ }
1 I0 j3 f' Z9 N* L
; L+ a; g( P9 c% t6 y; j2.数组变量$ ~0 N5 o+ @! t) A- R. G/ G% N
数组是一些元素的集合。TCL的数组和一般编程语言中的数组有很大的区别。在TCL中,不能单独声明一个数组,数组只能和数组元素一起声明。数组中数组元素的名字包含两部分:数组名和数组中元素的名字,TCL中数组元素的名字(下标)可以为任何字符串。, f* I& G7 y' g9 J0 u
例如:7 Y3 L$ Y$ ~1 h& O& t
set day(Monday) 1 . [; Q5 T3 g# r2 O+ [: F1 l1 j
set day(Tuesday) 2% p6 c( f! O a2 j
第一个命令生成一个名为day的数组,同时在数组中生成一个名为Monday的数组元素,并把值置为1,第二个命令生成一个名为Tuesday的数组元素,并把值置为2。5 k6 d; q! X- |
8 A$ l$ o# J+ @' S4 S7 [) ?
- [- v% \, V* r' Q; R) d) E; ?; f在数组元素的置换中,除了有括号之外,数组元素的置换和简单变量类似。例如:6 \, ?& ` h9 D: Q7 D$ A6 L
set a Monday
3 l" C1 N W0 A, Z3 t# T# l! Oset day(Monday) 1: \, H% l! p4 `% ~% |
set b $day(Monday) //b的值为1,即day(Monday)的值。# d5 b7 ]5 s" m
set c $day($a) //c的值为1,即day(Monday)的值。
1 E g k$ t+ S) Y& @% v5 g
9 P( y2 s- X" v3.相关指令7 k( O" H) x5 A {' i2 e
- W7 v) }8 L1 Q6 Z3 d" f( k, p9 w
(1)set 指令:TCL 的变量可以随时建立不用事先宣告,变量名称的取法也没有任何限制,所以可以使用任何字符来为变量命名,甚至变量名和指令名称相同也没问题。使用时只有一点要注意的就是 TCL 是大小写有区别的语言。通常,我们以 set 指令来设定变量值:
2 I# f' g- a* q9 q; @set x 5
& d& @* {) P. fset y 6
2 U* L- o/ y# L# i4 |4 h9 H Hset PI 3.14
z8 a. N* u. O: p( ^( e& _8 }5 Vset PI*2 6.28 ;# 注意!变量名称是 PI*2
& `/ H/ Q) t5 {: c* A1 I' |puts $PI*2
$ A( ? ^; h3 d$ Pset PI
: U* c7 X! O8 X; E6 x, eTCL 的 set 指令除了有设定变量值的用途外,也可以用来取出变量的内容,如上列程序最后一行使用 set 指令取出 PI的值 (注意!这边不用在变量名称前加上 $ 符号)。8 |' f# Y8 I5 L9 G/ r
(2)unset 指令用来删除一个或多个变量,来释放内存空间:
$ \. p- m9 T1 t/ ^; Y1 f, wunset x y PI
T' ]& |, }( c6 {8 g0 F) s2 U+ w3 t5 R' V5 h2 T# ]4 D' O
( Q0 k* M0 ]$ a M, j; P( b5 q' {1 D6 b
0 T& M4 S$ p, T* P7 k: j8 r* C. _6 `0 z$ W9 S2 I: M
|
|