生活在于有力度和信心,无论怎样的过程都是我们生命中的一个经历,认真对待它们,就是认真对待我们自己的人生!正视它们就是正视我们的生活,不会颓废,不会气馁!充满阳光和美好的气氛永远在你的身边!

TCL——Tool Command Language 扫盲

上一篇 / 下一篇  2008-08-20 23:24:57 / 天气: 阴雨 / 心情: 依然伤心 / 置顶(2) / 个人分类:学习

Tcl编程简介(一)

关键词tcl                                         51Testing软件测试网7~)\"A)~/ii"RCz

  Tcl是一种很通用的脚本语言,它几乎在所有的平台上都可以解释运行,功能强大。是tool command language的缩写,发音为 "tickle”, 实际上包含了两个部分:一个语言和一个库。

2N/m3C#c9g/X0  首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一 些互交程序如文本编辑器、调试器和shell。它有一个简单的语法 和很强可扩充性,Tcl可以创建新的过程以增强其内建命令的能力。51Testing软件测试网rT&cZaf#C U

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

51Testing软件测试网zG9Ho l u$bc4R~E

  下面简单介绍以下txl的语法规则:51Testing软件测试网Hq9KM)?$A)u9y1w

51Testing软件测试网 Y-`xXSZ

解释器

P hTU5Dd5u&]A$S051Testing软件测试网w R,D$Yc1J V k+^U

  在Tcl的数据结构中的核心是Tcl_Interp.一个解释器包含了一套命令,一组变量和一些用于描述状态的东西。每一个 Tcl命令是 在特定的Tcl_Interp中运行的,基于Tcl的应用程序可以同时拥有几个Tcl_Interp。Tcl_Interp是一个轻量级的结构,可以快速的新建和删除。51Testing软件测试网,Q(P9S)X8aJYN

/lFAC1vcz'kV0数据类型51Testing软件测试网zk7VFA]XV Sc J{

51Testing软件测试网d mX;E'kM(V

  Tcl只支持一种数据结构:字符串(string)。所有的命令,命令的所有的参数,命令的结果,所有的变量都是字符串。请牢记这一点,所有的东西都是字符串。 这是它比较有特点的方面字符串有三种形式:命令(command), 表达式(expresion)和表(list)。51Testing软件测试网u_G'L&A?R\v"v*[i%[

?5C:J:no;z4]0Basic Command Syntax 基本语法51Testing软件测试网#Q&L+\G;`,W X

51Testing软件测试网+fiIo$IFbT"pzv

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

/Xq co6}%Gx051Testing软件测试网2EjrWH._

  例如:

XH3L,Z3T~051Testing软件测试网0lV!jF\(K j"C

  set a 22 //相当于C中的 a=22 a是一个变量这条命令分为三个域:1: set 2: a 3: 22 set使用于设置变量的值的命令,a、20 作为参数来传给它,a使它要操作的变量名,22是要付给的a值。51Testing软件测试网^9q_D&J'j6D-L/Ob;?

;i,a\ w]0  Tcl的命令名可以是内置的命令也可以是用户建的新命令,如果是用户用户建的新命令应用程序中用函数Tcl_CreateCommand来创建。所有的参数作为字符串来传递,命令自己会按其所需来解释的参数的。命令的名字必须被打全,但 Tcl解释器找不到一同名的命令时会用 unknown命令来代替。51Testing软件测试网5p] peW-e%K

51Testing软件测试网$jy(z2POjM,W5R

  在很多场合下,unknown 会在库目录中搜寻,找到一个的话,会自动生成一个Tcl命令并调用它。unknown经常完成缩略的命令名的执行。但最好不要使用。51Testing软件测试网C X[,hH3f|*{*\2e,H"_

51Testing软件测试网&U0xy6IP Of-k4b

注释

R"j*R;Pr9^0

S:D j-z8J![0  和shell很象,第一个字母是"#"的Tcl字符串是注释。

[#Hh kp"X2ZSN051Testing软件测试网/AX UIe

其他细节规则

F}3gWzJbn0

2\cB?L2i0  Grouping arguments with double-quotes 用双引号来集群参数,目的在于使用有空白的参数。51Testing软件测试网Nbt,vB'T

2z&q~'qh:w*\*q`Xx0  例如:51Testing软件测试网.N&p f8W`h

set a "this string contains whitespace"

V5Qn8\*P.|%P0  如够一个参数一双引号来开始,该参数会一直到下一个双引号才结束。其中可以有换行符和分号。

_+?|l9oT051Testing软件测试网N"Ux,g["o

  Variable substitution with $ 用美元符进行变量替换说白了就是引用该变量。51Testing软件测试网9[ gm |} M;u

|y7V r!N4t.?.i0  如:51Testing软件测试网 L ?WsZ&J(L

set a hello 
set b $a // b = "hello" 实际上传给set命令的参数 
//是b,"hello" 
set c a // b = "a"
51Testing软件测试网 H;HP)kg7u0~

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

t6}l"N!cx051Testing软件测试网6VKA#h,}'dhc;O Z

  例如:51Testing软件测试网IX#LX4g7vj V8@

set a [set b "hello"]
51Testing软件测试网oC"hjv*~L

  实现执行 set b "hello" 并用其结果来替换源命令 中的方括号部分,产生一条新命令

!|8fY1a1g+Am ^OZ051Testing软件测试网+sLV&B w

  set a "hello" //"hello" 为 set b "hello" 的返回值51Testing软件测试网0?:KD.be:Ly/U;P

c*c CWx(|Tx-I0  最终的结果是b="hello" a="hello"51Testing软件测试网%meh:rX"Zdk

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

uT(Ysh0

-`]"F(]y"Bq9r,D0?r0  如下一个复杂一点的例子:51Testing软件测试网 L'}"UL(Y

set a xyz[set b "abc"].[set c "def"] 
//return xyzabcdef
51Testing软件测试网_(Bq8Ub m }

  Backslash substitution 转移符替换51Testing软件测试网 Rm%f~\+v[!cw7_@y

"M'e;ml Jg0  转移符时间不可打印字符或由它数意义的字符插入进来。这一概念与C语言中的一样。51Testing软件测试网f0S)g7n_f m3q"I

Backspace (0x8). 
f Form feed (0xc). 

 Newline (0xa). 

 Carriage-return (0xd). 
 Tab (0x9). 
v Vertical tab (0xb). 
{ Left brace (`{"). 
} Right brace (`}"). 
[ Open bracket (`["). 
] Close bracket (`]"). 
$ Dollar sign (`$"). 
sp Space (` "): does not terminate argument. 
; Semicolon: does not terminate command. 
" Double-quote.
51Testing软件测试网$uQ3r4[Q9j

  Grouping arguments with braces 用花扩括号来集群参数51Testing软件测试网 oh3^7H/@|V0`Y k'P

j]"j$Y&Nq}7b0  用花扩括号来集群参数与用双引号来集群参数的区别在于:用花扩括号来集群参数其中的三种上述的子替换不被执行。而且可以嵌套。51Testing软件测试网ge0L){-rq#y

51Testing软件测试网o3O-z/g%HB

  例如:

sSC;Dt9bs @0
set a {xyz a {b c d}}//set收到俩个参数 a "xyz a {b c d}" 
eval { 
set a 22 
set b 33 
}//eval收到一个参数 "set a 22
set b 33"

ebijR0命令综述51Testing软件测试网Q)_p+p mDw

51Testing软件测试网` W;S/W^a:Z

  1.一个命令就是一个字符串(string)。

r2]io[,@_051Testing软件测试网Trb)x'Z:Q Z

  2.命令是用换行符或分号来分隔的。51Testing软件测试网's'dy4_s

"vw}6x-q`v0  3.一个命令由许多的域组成。第一个于是命令名,其它的域作为参数来传递。51Testing软件测试网5h Z'k_QWBb

#b.Jq4N}3?4S7N0  4.域通常是有空白(Tab横向制表健 Space空格)来分开的。51Testing软件测试网 J;a5i;AEp hTXf

5trH9e1dj;fr)Z0  5.双引号可以使一个参数包括换行符或分号。三种子替换仍然发生。51Testing软件测试网:n x1H3_!x"\\

(Osja!t6D Yrh0  6.花括号类似于双引号,只是不进行三总体换。51Testing软件测试网$K6m,|qi Yvy \a.T\

u!?4N3t aCe uo0  7.系统只进行一层子替换,机制替换的结果不会再去做子替换。而且子替换可以在任何一个域进行。51Testing软件测试网o5Jy d4dYp

)a6B;}E5g`0  8.如果第一个非控字符是`#", 这一行的所有东西都是注释。51Testing软件测试网4qc jE$ynno t.K

51Testing软件测试网*K"y7QM-E.g%X[

表达式51Testing软件测试网$W-fqC:l8Bh%g

51Testing软件测试网Y{1hwa$[X(M$[

  对字符串的一种解释是表达式。几个命令将其参数按表达式处理,如:expr、for 和 if,并调用Tcl表达式处理器(Tcl_ExprLong, Tcl_ExprBoolean等)来处理它们。其中的运算符与C语言的很相似。51Testing软件测试网z;e2fZ4|)q

!

2kZ&b4a"y0  逻辑非51Testing软件测试网/ao#z?v)B

* / % + - 
<< >>
51Testing软件测试网 n ?(e"]y_e?

  左移 右移 只能用于整数。51Testing软件测试网(X,v,~*['yK:[n%CW

< > <= >= == !=

ig od9o0  逻辑比较51Testing软件测试网OT1co1Rr!vCg Z

& ^ |

N$v!q&~Vh}w1n0  位运算 和 异或 或51Testing软件测试网:K9yCC.RZO kK.D

&&'  '

TAG: 学习

testxiaoxiao的个人空间 引用 删除 testxiaoxiao   /   2008-12-29 17:46:57
如果是要返回xyzabcdef,则:
set a "xyz[set b "abc"][set c "def"]"
testxiaoxiao的个人空间 引用 删除 testxiaoxiao   /   2008-12-29 17:34:26
set a xyz[set b "abc"].[set c "def"]
//return xyzabcdef
结果是:
/xyzabc.def
testxiaoxiao的个人空间 引用 删除 testxiaoxiao   /   2008-12-29 17:30:52
set b $a // b = "hello"
这句是执行是有问题的,如果想把$a // b = "hello"
赋给b,那也是
set b "$a //b = hello"
 

评分:0

我来说两句

日历

« 2024-05-13  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 7777
  • 日志数: 8
  • 文件数: 1
  • 建立时间: 2008-08-19
  • 更新时间: 2008-11-12

RSS订阅

Open Toolbar