|
楼主 |
发表于 2020-4-14 16:26
|
显示全部楼层
TCL变量
0 u7 @& G+ s5 QTCL只支持一种数据类型:字符串(string)。所有的命令,命令的所有的参数,命令的结果,所有的变量都是字符串。TCL变量根据其结构的复杂程度分为“简单变量”和“数组变量”两类。
+ o' m$ d: q/ R" j1.简单变量
) w3 I; x4 S# U; u2 D* ?一个TCL的简单变量包含两个部分:名字和值,其中名字和值都可以是任意字符串。不过为了更好的使用变量置换功能,变量名最好按C\C++语言中标识符的命名规则命名。这是因为TCL解释器在分析一个变量置换时,只把从$符号往后直到第一个不是字母、数字或下划线的字符之间的单词符号作为要被置换的变量的名字。例如:3 X* K/ d4 {2 z6 ]
set a 2 t1 Y2 L. q7 Z
set a.1 5
0 G6 M9 x3 m$ d6 b3 \+ @" q+ F( v, pset b $a.1
6 K3 f( z1 A: B/ t* U5 _' g$ V8 J: u$ o- W! p% r
在最后一个命令行,我们希望把变量a.1的值付给b,但是TCL解释器在分析时只把$符号之后直到第一个不是字母、数字或下划线的字符(这里是'.')之间的单词符号(这里是'a')当作要被置换的变量的名字,所以TCL解释器把a置换成2,然后把字符串“2.1”付给变量b。这显然与我们的初衷不同。当然,如果变量名中有不是字母、数字或下划线的字符又要用变量置换,可以用花括号把变量名括起来。例如:: g7 X' _6 _. `4 o! _7 ] w
set b ${a.1}
& b7 j8 S" c( P
& T$ p; A* w- p5 r) U* J
, L. y4 A. |" p2 j( x2.数组变量6 g( R1 c) h1 l- i9 U
数组是一些元素的集合。TCL的数组和一般编程语言中的数组有很大的区别。在TCL中,不能单独声明一个数组,数组只能和数组元素一起声明。数组中数组元素的名字包含两部分:数组名和数组中元素的名字,TCL中数组元素的名字(下标)可以为任何字符串。7 Y8 N, v" N1 d' T( B; d% L
例如:
! \" [7 z' l3 a* a% I. `" Fset day(Monday) 1
- Y3 c! k' Q" N: ~! g7 M7 Rset day(Tuesday) 29 o% V+ D! [$ K0 ]/ e4 F, D/ F
第一个命令生成一个名为day的数组,同时在数组中生成一个名为Monday的数组元素,并把值置为1,第二个命令生成一个名为Tuesday的数组元素,并把值置为2。# b$ p9 y4 @- q0 J' @ w! s* }9 j
9 z: N1 O8 l! v5 {% t
3 @4 n! }3 O! O6 \0 C9 ^
在数组元素的置换中,除了有括号之外,数组元素的置换和简单变量类似。例如:
% J' \) Q. Z2 |2 \' yset a Monday$ u2 |( M( ~2 p' D
set day(Monday) 1
% n# E# z% t& W, ]set b $day(Monday) //b的值为1,即day(Monday)的值。! A9 P- L2 _5 q0 R j& y
set c $day($a) //c的值为1,即day(Monday)的值。1 R4 a o) A( e: F/ S& D S
% K t% X5 t7 }
3.相关指令
# h' L, x9 Z6 c! Z% _( _
& j( o5 d+ h# e) y(1)set 指令:TCL 的变量可以随时建立不用事先宣告,变量名称的取法也没有任何限制,所以可以使用任何字符来为变量命名,甚至变量名和指令名称相同也没问题。使用时只有一点要注意的就是 TCL 是大小写有区别的语言。通常,我们以 set 指令来设定变量值:$ o3 {$ K) W: I8 d& K8 P! n
set x 5
* \/ T' R' ~9 W1 Zset y 6+ a5 f( F; a0 H6 t1 D
set PI 3.14+ I( C* V3 D9 G& I
set PI*2 6.28 ;# 注意!变量名称是 PI*2
3 j2 Y/ N! H# w# vputs $PI*26 g% w! y& p- J, c: _6 P$ m
set PI# Y5 J$ u" U% r* E
TCL 的 set 指令除了有设定变量值的用途外,也可以用来取出变量的内容,如上列程序最后一行使用 set 指令取出 PI的值 (注意!这边不用在变量名称前加上 $ 符号)。
* T# s- J8 S( a' |: c2 e(2)unset 指令用来删除一个或多个变量,来释放内存空间:+ J7 e( i# H& ^
unset x y PI
, N9 W7 b. }( `, T/ C2 z
! O, T; R9 e( D0 M" \2 e
, i# s5 T5 p$ E- r. t* v1 V! P% Q$ X" C7 w% G- R8 v
) ~# q( D! _9 y' z8 L
3 Q% _$ F }6 p- M( d1 k
|
|