|
楼主 |
发表于 2020-4-14 16:27
|
显示全部楼层
TCL变量
4 i" \8 c, F, z* k9 @/ h. MTCL只支持一种数据类型:字符串(string)。所有的命令,命令的所有的参数,命令的结果,所有的变量都是字符串。TCL变量根据其结构的复杂程度分为“简单变量”和“数组变量”两类。9 ~- I( Q6 a* I
1.简单变量
( {( p9 v2 |. M# ]" {+ W6 O$ [$ f一个TCL的简单变量包含两个部分:名字和值,其中名字和值都可以是任意字符串。不过为了更好的使用变量置换功能,变量名最好按C\C++语言中标识符的命名规则命名。这是因为TCL解释器在分析一个变量置换时,只把从$符号往后直到第一个不是字母、数字或下划线的字符之间的单词符号作为要被置换的变量的名字。例如:
" ~9 `. S6 A& \* n! C3 g3 p( Mset a 2
5 G& |" f- A6 R: Y* wset a.1 5
1 z4 C0 i8 C7 x! `0 iset b $a.1
9 b& @, o, A( g- s+ ]在最后一个命令行,我们希望把变量a.1的值付给b,但是TCL解释器在分析时只把$符号之后直到第一个不是字母、数字或下划线的字符(这里是'.')之间的单词符号(这里是'a')当作要被置换的变量的名字,所以TCL解释器把a置换成2,然后把字符串“2.1”付给变量b。这显然与我们的初衷不同。当然,如果变量名中有不是字母、数字或下划线的字符又要用变量置换,可以用花括号把变量名括起来。例如:9 P$ A: j4 d' c; S6 Q) x4 Q; x7 b
% E S. [1 k) Aset b ${a.1}
3 z/ }7 F4 a ?5 g, n7 q) ?! K2.数组变量
, @. B% j# u. S9 A4 J, y8 Q# n数组是一些元素的集合。TCL的数组和一般编程语言中的数组有很大的区别。在TCL中,不能单独声明一个数组,数组只能和数组元素一起声明。数组中数组元素的名字包含两部分:数组名和数组中元素的名字,TCL中数组元素的名字(下标)可以为任何字符串。" _3 H, P3 Z8 b% ~7 p$ D
例如:5 `, D0 S+ }% R' x# D: ?# p+ g
set day(Monday) 1 % D6 o% y0 d/ Z/ l
set day(Tuesday) 2( I0 Z6 k& u7 N8 h9 F0 ^& O" U
第一个命令生成一个名为day的数组,同时在数组中生成一个名为Monday的数组元素,并把值置为1,第二个命令生成一个名为Tuesday的数组元素,并把值置为2。- s% ~- i& A7 ]' Q; W
在数组元素的置换中,除了有括号之外,数组元素的置换和简单变量类似。例如:
: u- B$ p- c h9 N) f; K. }6 D
# g6 K; K* x$ d8 F1 B; xset a Monday7 r5 D1 a0 G4 b! [- L, G" E/ K9 S
set day(Monday) 1: C- t6 \$ k1 s- o
set b $day(Monday) //b的值为1,即day(Monday)的值。0 l* A6 q0 u' h$ O/ O) t
set c $day($a) //c的值为1,即day(Monday)的值。8 O$ Z6 f. K5 q4 s0 W2 i
, N4 I/ J+ N. T4 A Z0 x% e6 a+ T
9 r f9 G2 I5 c2 o+ Z& M" z3.相关指令
/ T. h5 q& V" q; ^( Q8 t(1)set 指令:TCL 的变量可以随时建立不用事先宣告,变量名称的取法也没有任何限制,所以可以使用任何字符来为变量命名,甚至变量名和指令名称相同也没问题。使用时只有一点要注意的就是 TCL 是大小写有区别的语言。通常,我们以 set 指令来设定变量值:# i+ ~1 |3 c% q9 n
set x 5
) I O' n4 H& M% ~set y 6$ B! Y5 [9 _. H6 \- ?" J
set PI 3.14* c7 n# u N% D1 C9 o+ v5 ], Q
set PI*2 6.28 ;# 注意!变量名称是 PI*2
/ K) R! s6 E% Tputs $PI*2: G7 d6 v9 r2 g4 t8 R3 }7 ^) T
set PI
4 b$ u: {; K+ E; x0 T' l" M3 c" j$ c* dTCL 的 set 指令除了有设定变量值的用途外,也可以用来取出变量的内容,如上列程序最后一行使用 set 指令取出 PI的值 (注意!这边不用在变量名称前加上 $ 符号)。5 |* _" y5 a6 R! @ K2 B8 A; [/ X
(2)unset 指令用来删除一个或多个变量,来释放内存空间:& k2 `' @ U" l" O
unset x y PI0 {8 q7 Q. Q- c8 w. d' X- X
6 F% o) i4 i3 S" j' K. m# n+ k2 \, R, C& t/ W
|
|