Tickle编程(一)
简介51Testing软件测试网
vn+uyj*J9D Tcl是一种很通用的脚本语言,它几乎在所有的平台上都可以解释运行,功能强大。是tool command language的缩写,发音为 "tickle”, 实际上包含了两个部分:一个语言和一个库。51Testing软件测试网_,^.y-d&J1R&o'w&?_ 51Testing软件测试网SQs5B LZ%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*As0J4Zw R+hu0 在Tcl的数据结构中的核心是Tcl_Interp.一个解释器包含了一套命令,一组变量和一些用于描述状态的东西。每一个 Tcl命令是 在特定的Tcl_Interp中运行的,基于Tcl的应用程序可以同时拥有几个Tcl_Interp。Tcl_Interp是一个轻量级的结构,可以快速的新建和删除。 Ot1l3R m}E3SJ*{0*DbVFN)x0数据类型 )h}rFb/{d0}#R&];@2A Vg/x ^/W0 Tcl只支持一种数据结构:字符串(string)。所有的命令,命令的所有的参数,命令的结果,所有的变量都是字符串。请牢记这一点,所有的东西都是字符串。 这是它比较有特点的方面字符串有三种形式:命令(command), 表达式(expresion)和表(list)。51Testing软件测试网wpN,D*@]/qlTu 51Testing软件测试网#J!LH U9P/["A3A!fxBasic Command Syntax 基本语法 7r#b%t%jfF5n051Testing软件测试网/fa;eqz2Gw2BTcl有类似于shell和lisp的语法,当然也有许多的不同。一 条Tcl的命令串包含了一条或多条命令用换行符或分号来隔开,而每一条命令包含了一个域(field)的集合,域使用空白分开的,第一个域是一个命令的名字,其它的是作为参数来传给它。 6T7GV V ErS%~&Z051Testing软件测试网`.Pc-@}G*ao例如: ItZS]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 gInI@~b051Testing软件测试网B z[q;b$X%^'`k)H8e-R注释 \!osBY8?Nb051Testing软件测试网Fw5Zmd`和shell很象,第一个字母是"#"的Tcl字符串是注释。 "E+q#iX K051Testing软件测试网 BC#D3H&lJd其他细节规则51Testing软件测试网F4E,~b yy pzq~&D 51Testing软件测试网'\2zX5U+I1fI9XGrouping arguments with double-quotes 用双引号来集群参数,目的在于使用有空白的参数。 )c:q)Zan,p^d051Testing软件测试网9jS_$Z$`%FOe例如:51Testing软件测试网Gk8t1p0_ U9G
(z7PMN I0 如够一个参数一双引号来开始,该参数会一直到下一个双引号才结束。其中可以有换行符和分号。 G[xZLlf051Testing软件测试网I8tB t_-Z&K?Variable substitution with $ 用美元符进行变量替换说白了就是引用该变量。51Testing软件测试网v6C7Z)q&p1QwV1C0U 51Testing软件测试网%D$?cmZ^6h如: x3zc1` m\ b9T*c0
Command substitution with brackets 命令子替换(用方括号) f/d-rN3{g!p4i}0R,qJ].`^Z{$u0 例如: VH-oEU,?0
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
Backslash substitution 转移符替换51Testing软件测试网,Pko#T[7} 51Testing软件测试网4C)U#@&Q#M/U转移符时间不可打印字符或由它数意义的字符插入进来。这一概念与C语言中的一样。 j-q)~RwV#kV/tH0
Grouping arguments with braces 用花扩括号来集群参数51Testing软件测试网G$u mG6_o(Z,D |