TCL语言基础教程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Tcl语言参考
Tcl("Tool Command Language",即工具命令语言;Tcl念作“踢叩”"tickle")是一种易学易用易于扩展的脚本语言,实际上包
含了两个部分:一个语言和一个库。
首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些交互程序如文本编辑器、调试器和shell。它有一个简单
的语法和很强可扩充性,Tcl可以创建新的过程以增强其内建命令的能力。
其次,Tcl是一个库包,可以被嵌入应用程序,Tcl的库包含了一个分析器、用于执行内建命令的例程和可以使你扩充
(定义新的过程)的库函数。应用程序可以产生Tcl命令并执行,命令可以由用户产生,也可以从用户接口的一个输入中读
取(按钮或菜单等)。
Tcl和其他编程语言例如C不同,它是一种解释语言而非编译语言。Tcl程序由一系列Tcl 命令组成,在运行时由Tcl解释
器解释运行。
Tcl有大量的用C/C++编写的扩展用于提供Tcl本身不具有的功能。其中使用最广泛的扩展是TK,TK提供了各种OS平台下
的图形用户界面GUI(连强大的Python语言都不单独提供自己的GUI,而是提供接口适配到TK上)。另一个流行的扩展包是Exp-
ect,它提供了通过终端自动执行命令的能力,例如passwd,ftp,telnet等命令驱动的外壳。
一、Tcl程序基本结构
1、基本语法
Tcl有类似于shell的语法,一条Tcl的命令串包含了一条或多条命令用换行符或分号来隔开,而每一条命令包含了一个
域(field)的集合,域使用空白(空格或TAB)分开的,第一个域是一个命令的名字,其它的是作为参数来传给它。
Tcl解释器对一个命令的求值过程分为两部分:分析和执行。在分析阶段,Tcl解释器运用规则识别出命令并把命令分
成一个个独立的单词,同时进行必要的置换(substitution);在执行阶段,Tcl解释器会把第一个单词当作命令名,并查看这
个命令是否有定义,如果有定义就激活这个命令对应的C/C++过程,并把所有的单词作为参数传递给该命令过程,让命令过
程进行处理。
Tcl的命令名可以是内建的命令也可以是用户建的新命令,在应用程序中可用函数Tcl_CreateCommand来创建新的命令。
所有的参数作为字符串来传递,命令自己会按其所需来解释的参数的。
另外关于Tcl的注释有一个特殊的要求:'#'必须出现在Tcl解释器期望命令的第一个字符出现的地方,才被当作注释。
例如:
set a100#Not a comment
set b101;#this is a comment
第一个例子中'#'及其后面的内容会被当作set的参数而非注释从而导致参数个数错误;但第二个被解释为注释,因为
'#'前面有一个分号,而分号和换行一样被看作是命令的分隔符。
脚步命令:
(1)eval命令
eval命令是一个用来构造和执行TCL脚本的命令,其语法为:
eval arg arg...
它可以接收一个或多个参数,然后把所有的参数以空格隔开组合到一起成为一个脚本,然后对这个脚本进行求值。
(2)source命令
source命令读一个文件并把这个文件的内容作为一个脚本进行求值。例如:
source e:/tcl&c/hello.tcl
注意路径的描述应该和UNIX相同,使用'/'而不是'\'。
2、置换(Substitution)
set x10
set y100+x
上面命令执行后,y的值是“100+x”而不是我们期望的110。这是因为Tcl解释器在分析命令时,把所有的命令参数都当作
字符串看待,所以x被看作了字符串“100+x”的一部分。如果我们想使用x的值'10',就必须告诉Tcl解释器:我们在这里期望的
是变量x的值,而非字符'x'。怎么告诉Tcl解释器呢,这就要用到Tcl语言中提供的置换功能。
Tcl提供三种形式的置换:变量置换、命令置换和反斜杠置换。每种置换都会导致一个或多个单词本身被其他的值所代替。置换
可以发生在包括命令名在内的每一个单词中,而且置换可以嵌套。
(1)变量置换(variable substitution)
变量置换由一个$符号标记,变量置换会导致变量的值而非变量(标识符)本身被插入到字符串中。
set x10
set y100+$x
这时,y的值还不是我们想要的值110,而是10+100,因为Tcl解释器把10+100看成是一个字符串而不是表达式;y要想得到值
110,还必须用命令置换,使得Tcl会把10+100看成一个表达式并求值。
(2)命令置换(command substitution)
命令置换是由[]括起来的Tcl命令及其参数,命令置换会导致某一个命令的所有或部分单词(参数)被另一个命令的结果所代替。
set x10
set y[expr100+$x]
这时,y的值就是110了。这里当Tcl解释器遇到字符'['时,它就会把随后的expr作为一个命令名,从而激活与expr对应的C/C++过
程,并把expr命令中变量置换后得到的'10+110'传递给该命令过程进行处理。
注意,[]中必须是一个合法的Tcl脚本,长度不限。[]中脚本的值为最后一个命令的返回值,例如:
有了命令置换,实际上就表示命令之间是可以嵌套的,即一个命令的结果可以作为别的命令的参数。
(3)反斜杠置换(backslash subtitution)
Tcl语言中的反斜杠置换类似于C语言中反斜杠的用法,主要用于在单词符号中插入诸如换行符、空格、[、$等被Tcl解释器当作
特殊符号对待的字符。例如:
set msg multiple\space
如果没有'\'的话,Tcl会报错,因为解释器会把这里最后两个单词之间的空格认为是分隔符,于是发现set命令有多于两个参数,
从而报错。加入了'\'后,空格不被当作分隔符,'multiple space'被认为是一个单词(word)。
(4)双引号和花括号
除了使用反斜杠外,Tcl提供另外两种方法来使得解释器把分隔符和置换符等特殊字符当作普通字符,而不作特殊处理,这就
要使用双引号和花括号({})。
Tcl解释器对双引号中的各种分隔符将不作处理,但是对换行符及$和[]两种置换符会照常处理。而在花括号中,所有特殊字符
都将成为普通字符,失去其特殊意义,Tcl解释器不会对其作特殊处理。