“未来的世界:方向比努力重要,能力比知识重要,健康比成绩重要,生活比文凭重要,情商比智商重要! ”    ——清华大学校长留给毕业生的一段话

Tickle编程(一)

上一篇 / 下一篇  2007-07-09 15:43:37

简介51Testing软件测试网 vn+uyj*J9D

  Tcl是一种很通用的脚本语言,它几乎在所有的平台上都可以解释运行,功能强大。是tool command language的缩写,发音为 "tickle”, 实际上包含了两个部分:一个语言和一个库。51Testing软件测试网_,^.y-d&J1R&o'w&?_

51Testing软件测试网SQs5BLZ%z @s

  首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一 些互交程序如文本编辑器、调试器和shell。它有一个简单的语法 和很强可扩充性,Tcl可以创建新的过程以增强其内建命令的能力。51Testing软件测试网6P*ckC3n h

51Testing软件测试网Zm0b*n:I3bP

  其次,Tcl是一个库包,可以被嵌入应用程序,Tcl的库包含了一个分析器、用于执行内建命令的例程和可以使你扩充(定义新的 过程)的库函数。应用程序可以产生Tcl命令并执行,命令可以由用户产生,也可以从用户接口的一个输入中读取(按钮或菜单等)。 但Tcl库收到命令后将它分解并执行内建的命令,经常会产生递归的调用。51Testing软件测试网yXCo_$V&{vzC0@

51Testing软件测试网2pac2i`-}T

  下面简单介绍以下txl的语法规则:

T*H;_J7qz4Y051Testing软件测试网;B'_"S|IIR

解释器

|d;w$|S\.m*As0

J4Zw R+hu0  在Tcl的数据结构中的核心是Tcl_Interp.一个解释器包含了一套命令,一组变量和一些用于描述状态的东西。每一个 Tcl命令是 在特定的Tcl_Interp中运行的,基于Tcl的应用程序可以同时拥有几个Tcl_Interp。Tcl_Interp是一个轻量级的结构,可以快速的新建和删除。

Ot1l3R m}E3SJ*{0

*DbVFN)x0数据类型

)h}r Fb/{d0

}#R&];@2AVg/x ^/W0  Tcl只支持一种数据结构:字符串(string)。所有的命令,命令的所有的参数,命令的结果,所有的变量都是字符串。请牢记这一点,所有的东西都是字符串。 这是它比较有特点的方面字符串有三种形式:命令(command), 表达式(expresion)和表(list)。51Testing软件测试网wpN,D*@]/qlTu

51Testing软件测试网#J!LH U9P/["A3A!fx

Basic Command Syntax 基本语法

7r#b%t%jfF5n051Testing软件测试网/fa;eqz2Gw2B

  Tcl有类似于shell和lisp的语法,当然也有许多的不同。一 条Tcl的命令串包含了一条或多条命令用换行符或分号来隔开,而每一条命令包含了一个域(field)的集合,域使用空白分开的,第一个域是一个命令的名字,其它的是作为参数来传给它。

6T7GV V ErS%~&Z051Testing软件测试网`.Pc-@}G*ao

  例如:

It ZS]051Testing软件测试网6E*@$XN4H)t7g,|3|

  set a 22 //相当于C中的 a=22 a是一个变量这条命令分为三个域:1: set 2: a 3: 22 set使用于设置变量的值的命令,a、20 作为参数来传给它,a使它要操作的变量名,22是要付给的a值。

yV(]V|0

'S1NV_1fs$T|2ri0  Tcl的命令名可以是内置的命令也可以是用户建的新命令,如果是用户用户建的新命令应用程序中用函数Tcl_CreateCommand来创建。所有的参数作为字符串来传递,命令自己会按其所需来解释的参数的。命令的名字必须被打全,但 Tcl解释器找不到一同名的命令时会用 unknown命令来代替。

+`$yTyGP3g5w051Testing软件测试网 Ay8?7J)Y^,iy-?0h

  在很多场合下,unknown 会在库目录中搜寻,找到一个的话,会自动生成一个Tcl命令并调用它。unknown经常完成缩略的命令名的执行。但最好不要使用。

%y gIn I@~b051Testing软件测试网B z[q;b$X%^'`k)H8e-R

注释

\!osBY8?Nb051Testing软件测试网F w5Z md`

  和shell很象,第一个字母是"#"的Tcl字符串是注释。

"E+q#iX K051Testing软件测试网 BC#D3H&lJd

其他细节规则51Testing软件测试网F4E,~byy pzq ~&D

51Testing软件测试网'\2zX5U+I1fI9X

  Grouping arguments with double-quotes 用双引号来集群参数,目的在于使用有空白的参数。

)c:q)Z an,p ^d051Testing软件测试网9jS_$Z$`%FOe

  例如:51Testing软件测试网Gk8t1p0_ U9G

set a "this string contains whitespace"

(z7P MN I0  如够一个参数一双引号来开始,该参数会一直到下一个双引号才结束。其中可以有换行符和分号。

G[xZLlf051Testing软件测试网I8tB t_-Z&K?

  Variable substitution with $ 用美元符进行变量替换说白了就是引用该变量。51Testing软件测试网v6C7Z)q&p1Qw V1C0U

51Testing软件测试网%D$?cmZ^6h

  如:

x3zc1` m\ b9T*c0

noh+U? Qz0OC0set a hello
] i$~9B}8jr0set b $a // b = "hello" 实际上传给set命令的参数51Testing软件测试网P [v _2_,V&X
//是b,"hello"51Testing软件测试网N KWndgX
set c a // b = "a"
51Testing软件测试网%p)q2]8ib.T4s6tU

  Command substitution with brackets 命令子替换(用方括号)

f/d-rN3{ g!p4i}0

R,q J].`^Z{$u0  例如:

VH-oEU,?0
set a [set b "hello"]

R3f+e"^-G(` ^"E}0  实现执行 set b "hello" 并用其结果来替换源命令 中的方括号部分,产生一条新命令

d!@^ q%C:o N0

:H Ep a~0  set a "hello" //"hello" 为 set b "hello" 的返回值51Testing软件测试网bwlpRa[

0Xo\+b4Ay]7W0  最终的结果是b="hello" a="hello"51Testing软件测试网E#[k+V}ZN5s r;k

51Testing软件测试网Ci B|I6wB9LR

  当命令的一个子域以方括号开始以方括号结束,表示要进行一个命令子替换。并执行该子命令,用其结果来替换原命令中的方括号部分。方括号中的部分都被视为Tcl命令。

Z&b#z ~MKLQ0

})k0_-OR0B E0  如下一个复杂一点的例子:

i4T$WPj `k"T)Z0

I-Kx3H;IB K!T0set a xyz[set b "abc"].[set c "def"]
|h1Y E%{ l I0//return xyzabcdef
51Testing软件测试网]X}l~/x

  Backslash substitution 转移符替换51Testing软件测试网,Pk o#T[7}

51Testing软件测试网4C)U#@&Q#M/U

  转移符时间不可打印字符或由它数意义的字符插入进来。这一概念与C语言中的一样。

j-q)~ RwV#kV/tH0
51Testing软件测试网 wITQ+S
Backspace (0x8).
2D6b+V|9U9u0f Form feed (0xc).
5x#l#O/|M|&a2iu051Testing软件测试网X%@-c @ d-u`
Newline (0xa).
,W,[-VD7@ q `%D[0
"I;A r3H!B1I0Carriage-return (0xd).51Testing软件测试网.[dtoo!`-J:u6w
Tab (0x9).51Testing软件测试网qxp S"d y2Ka?
v Vertical tab (0xb).51Testing软件测试网_ tf v@.r
{ Left brace (`{").
e.Su BW5KD0} Right brace (`}").
f'j jY1\b3vs0[ Open bracket (`[").51Testing软件测试网 v$D GM1^$T
] Close bracket (`]").
io7I \c@ g6S&^0$ Dollar sign (`$").51Testing软件测试网6M.? pJD3o.u
sp Space (` "): does not terminate argument.51Testing软件测试网{B+VK2d k
; Semicolon: does not terminate command.51Testing软件测试网 Gsi9P Oz3W U
" Double-quote.
51Testing软件测试网M3Ho'Gr

  Grouping arguments with braces 用花扩括号来集群参数51Testing软件测试网G$umG6_o(Z,D

QL'bIVV@0  用花扩括号来集群参数与用双引号来集群参数的区别在于:用花扩括号来集群参数其中的三种上述的子替换不被执行。而且可以嵌套。51Testing软件测试网4D'kq*]+t(v

51Testing软件测试网 x`,h/d(H ]|B

  例如:51Testing软件测试网oQpkwOR9C


i2T AmY:X0set a {xyz a {b c d}}//set收到俩个参数 a "xyz a {b c d}"
1V1V0o&c3`0eval {
;t0jmqy0K(D;g a0set a 2251Testing软件测试网` {"e[%w F
set b 3351Testing软件测试网_`B1|(@,[
}//eval收到一个参数 "set a 2251Testing软件测试网!qgZ*C-F
set b 33"
51Testing软件测试网*~1TU,}eH{

命令综述

,n"T1MxT4U0

*~o(ot'E G/QRq0  1.一个命令就是一个字符串(string)。

C%pH xh051Testing软件测试网6\ W9M4\7BE7g`7G

  2.命令是用换行符或分号来分隔的。51Testing软件测试网i\$T {[ {O

2NpaT S6dJ;`j0  3.一个命令由许多的域组成。第一个于是命令名,其它的域作为参数来传递。

j[NE.P8a!a6T051Testing软件测试网| t0QD9f"eI/f

  4.域通常是有空白(Tab横向制表健 Space空格)来分开的。

_N1BE6g j0

[L^u mT[n0  5.双引号可以使一个参数包括换行符或分号。三种子替换仍然发生。

,Ayf2O.oe)_0

}7Pv/Z n Q0  6.花括号类似于双引号,只是不进行三总体换。51Testing软件测试网I_P)dC

|hM s"vj5U~0  7.系统只进行一层子替换,机制替换的结果不会再去做子替换。而且子替换可以在任何一个域进行。

Cu;wj}N)l0

g\J`u/J%~0  8.如果第一个非控字符是`#", 这一行的所有东西都是注释。51Testing软件测试网"ZN'RwW}

J}6rp5oP Z|5^0表达式

ZtuV0f8S8T ^0

Ur$ww`5s"|0  对字符串的一种解释是表达式。几个命令将其参数按表达式处理,如:expr、for 和 if,并调用Tcl表达式处理器(Tcl_ExprLong, Tcl_ExprBoolean等)来处理它们。其中的运算符与C语言的很相似。51Testing软件测试网2Tk ^vR@

!

gc3Q)E zbQ3j0  逻辑非

:Ra,[']KCZ]%x#[0
51Testing软件测试网O-ez"MA
* / % + -
3ce/[1V&G0<< >>
51Testing软件测试网Q2t'XN0?eFe

  左移 右移 只能用于整数。

(d7NGk+M?0
< > <= >= == !=

"B] [Bt3H-q y6`ae0  逻辑比较51Testing软件测试网m0T1D(i:si

& ^ |

cH.AW'S5b5C0  位运算 和 异或 或51Testing软件测试网)S`[Qys

&&'  '
51Testing软件测试网 j.J5vu*}3q1rk

  逻辑"和" "或"

Q,q-pZcDa;|3m7q0
x ? y : z

[7N6{r(Vz'I5S0  If-then-else 与C的一样51Testing软件测试网E!T:~GB4_&N}

51Testing软件测试网C;{B7mj

  Tcl 中的逻辑真为1,逻辑假为0。

PK]?,Am1G.e5QP0

dqM Ib0  一些例子:

:w2{5\-Wk\I0

kx~0Gj#x05 / 4.0
4fUs3cw^05 / ( [string length "abcd"] + 0.0 )

$_)V\4WZ `"| Fr0  计算字符串的长度 转化为浮点数来计算

#Y)m%N~s&N0
51Testing软件测试网){q!q
EPP3^
"0x03" > "2"51Testing软件测试网0^w1i*a/WG g
"0y" < "0x12"

`/ts.|4NG@ JQ0  都返回 1

&Y-I(L(z+|{7fJ0
51Testing软件测试网Hd*F~`*wz]4U;q
set a 1
i/K4xZ*Y S7b0expr $a+2
(V#M*L0vP X)z;h N0expr 1+2

s?KX"t)MH+T0  都返回 351Testing软件测试网+mtjob:q;i

['I n3C F:x0
8w$c rG?7v0

Y(W9I&J&px0
0L3D2ATp+Nht-X M V6Y+Z0
h"z V&mKEy@|051Testing软件测试网g"E2}'C~CI2j

`_&cI'O }~*I t0

TAG:

 

评分:0

我来说两句

我的栏目

日历

« 2023-12-26  
     12
3456789
10111213141516
17181920212223
24252627282930
31      

数据统计

  • 访问量: 56455
  • 日志数: 103
  • 图片数: 4
  • 文件数: 2
  • 建立时间: 2007-05-20
  • 更新时间: 2010-11-23

RSS订阅

Open Toolbar