[TCL]Tcl语⾔基礎教程(⼀)
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 a 100 # Not a comment
set b 101 ; # this is a comment
第⼀个例⼦中'#'及其后⾯的内容会被当作set 的参数⽽⾮注释从⽽导致参数个数错误;但第⼆个被解释为注释,因为'#'前⾯有⼀个分号,⽽分号和换⾏⼀样被看作是命令的分隔符。
脚步命令:
(1)eval命令
eval命令是⼀个⽤来构造和执⾏TCL脚本的命令,其语法为:
eval arg arg ...
它可以接收⼀个或多个参数,然后把所有的参数以空格隔开组合到⼀起成为⼀个脚本,然后对这个脚本进⾏求值。
(2)source命令
source命令读⼀个⽂件并把这个⽂件的内容作为⼀个脚本进⾏求值。例如:
source e:/tcl&l
注意路径的描述应该和UNIX相同,使⽤'/'⽽不是'\'。
2、置换(Substitution)
set x 10python菜鸟教程100
set y 100 + x
上⾯命令执⾏后,y的值是“100 + x”⽽不是我们期望的110。这是因为Tcl解释器在分析命令时,把所有的命令参数都当作字符串看待,所以x 被看作了字符串“100 + x”的⼀部分。如果我们想使⽤x的值'10' ,
就必须告诉Tcl解释器:我们在这⾥期望的是变量x的值,⽽⾮字符'x'。怎么告诉Tcl解释器呢,这就要⽤到Tcl语⾔中提供的置换功能。Tcl提供三种形式的置换:变量置换、命令置换和反斜杠置换。每种置换都会导致⼀个或多个单词本⾝被其他的值所代替。置换可以发⽣在包括命令名在内的每⼀个单词中,⽽且置换可以嵌套。
(1)变量置换(variable substitution)
变量置换由⼀个$符号标记,变量置换会导致变量的值⽽⾮变量(标识符)本⾝被插⼊到字符串中。
set x 10
set y 100 + $x
这时,y的值还不是我们想要的值110,⽽是10+100,因为Tcl解释器把10+100看成是⼀个字符串⽽不是表达式;y要想得到值110,还必须⽤命令置换,使得Tcl会把10+100看成⼀个表达式并求值。
(2)命令置换(command substitution)
命令置换是由[]括起来的Tcl命令及其参数,命令置换会导致某⼀个命令的所有或部分单词(参数)被另⼀个命令的结果所代替。
set x 10
set y [expr 100+$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解释器不会对其作特殊处理。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论