TCL培训教程全

上传人:沈*** 文档编号:62848640 上传时间:2022-03-16 格式:DOC 页数:95 大小:333.01KB
收藏 版权申诉 举报 下载
TCL培训教程全_第1页
第1页 / 共95页
TCL培训教程全_第2页
第2页 / 共95页
TCL培训教程全_第3页
第3页 / 共95页
资源描述:

《TCL培训教程全》由会员分享,可在线阅读,更多相关《TCL培训教程全(95页珍藏版)》请在装配图网上搜索。

1、Tcl编程简介(一)简介 Tcl是一种很通用的脚本语言,它几乎在所有的平台上都可以解释运行,功能强大。是tool command language的缩写,发音为 tickle”, 实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一 些互交程序如文本编辑器、调试器和shell。它有一个简单的语法 和很强可扩充性,Tcl可以创建新的过程以增强其内建命令的能力。其次,Tcl是一个库包,可以被嵌入应用程序,Tcl的库包含了一个分析器、用于执行内建命令的例程和可以使你扩充(定义新的 过程)的库函数。应用程序可以产生Tcl命令并执行,命令可以由用户产生,也可以

2、从用户接口的一个输入中读取(按钮或菜单等)。 但Tcl库收到命令后将它分解并执行内建的命令,经常会产生递归的调用。下面简单介绍以下tcl的语法规则:解释器在Tcl的数据结构中的核心是Tcl_Interp.一个解释器包含了一套命令,一组变量和一些用于描述状态的东西。每一个 Tcl命令是 在特定的Tcl_Interp中运行的,基于Tcl的应用程序可以同时拥有几个Tcl_Interp。Tcl_Interp是一个轻量级的结构,可以快速的新建和删除。数据类型Tcl只支持一种数据结构:字符串(string)。所有的命令,命令的所有的参数,命令的结果,所有的变量都是字符串。请牢记这一点,所有的东西都是字符串

3、。 这是它比较有特点的方面字符串有三种形式:命令(command), 表达式(expresion)和表(list)。Basic Command Syntax 基本语法Tcl有类似于shell和lisp的语法,当然也有许多的不同。一 条Tcl的命令串包含了一条或多条命令用换行符或分号来隔开,而每一条命令包含了一个域(field)的集合,域使用空白分开的,第一个域是一个命令的名字,其它的是作为参数来传给它。例如:set a 22 /相当于C中的 a=22 a是一个变量这条命令分为三个域:1 set 2 a 3 22 set使用于设置变量的值的命令,a、20 作为参数来传给它,a使它要操作的变量名,

4、22是要付给的a值。Tcl的命令名可以是内置的命令也可以是用户建的新命令,如果是用户用户建的新命令应用程序中用函数Tcl_CreateCommand来创建。所有的参数作为字符串来传递,命令自己会按其所需来解释的参数的。命令的名字必须被打全,但 Tcl解释器找不到一同名的命令时会用 unknown命令来代替。在很多场合下,unknown 会在库目录中搜寻,找到一个的话,会自动生成一个Tcl命令并调用它。unknown经常完成缩略的命令名的执行。但最好不要使用。注释和shell很象,第一个字母是#的Tcl字符串是注释。其他细节规则Grouping arguments with double-quo

5、tes 用双引号来集群参数,目的在于使用有空白的参数。例如:set a this string contains whitespace 如够一个参数一双引号来开始,该参数会一直到下一个双引号才结束。其中可以有换行符和分号。Variable substitution with $ 用美元符进行变量替换说白了就是引用该变量。如:set a hello set b $a / b = hello 实际上传给set命令的参数 /是b,hello set c a / b = a Command substitution with brackets 命令子替换(用方括号)例如:set a set b hel

6、lo 实现执行 set b hello 并用其结果来替换源命令 中的方括号部分,产生一条新命令set a hello /hello 为 set b hello 的返回值最终的结果是b=hello a=hello当命令的一个子域以方括号开始以方括号结束,表示要进行一个命令子替换。并执行该子命令,用其结果来替换原命令中的方括号部分。方括号中的部分都被视为Tcl命令。如下一个复杂一点的例子:set a xyzset b abc.set c def /return xyzabcdef Backslash substitution 转移符替换转移符时间不可打印字符或由它数意义的字符插入进来。这一概念与C

7、语言中的一样。 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. Gr

8、ouping arguments with braces 用花扩括号来集群参数用花扩括号来集群参数与用双引号来集群参数的区别在于:用花扩括号来集群参数其中的三种上述的子替换不被执行。而且可以嵌套。例如:set a xyz a b c d/set收到俩个参数 a xyz a b c d eval set a 22 set b 33 /eval收到一个参数 set a 22set b 33 命令综述1.一个命令就是一个字符串(string)。2.命令是用换行符或分号来分隔的。3.一个命令由许多的域组成。第一个于是命令名,其它的域作为参数来传递。4.域通常是有空白(Tab横向制表健 Space空格)

9、来分开的。5.双引号可以使一个参数包括换行符或分号。三种子替换仍然发生。6.花括号类似于双引号,只是不进行三总体换。7.系统只进行一层子替换,机制替换的结果不会再去做子替换。而且子替换可以在任何一个域进行。8.如果第一个非控字符是#, 这一行的所有东西都是注释。表达式对字符串的一种解释是表达式。几个命令将其参数按表达式处理,如:expr、for 和 if,并调用Tcl表达式处理器(Tcl_ExprLong, Tcl_ExprBoolean等)来处理它们。其中的运算符与C语言的很相似。逻辑非* / % + - 左移 右移 只能用于整数。 = = != 逻辑比较& | 位运算 和 异或 或& 逻辑

10、和 或x ? y : z If-then-else 与C的一样Tcl 中的逻辑真为1,逻辑假为0。一些例子:5 / 4.0 5 / ( string length abcd + 0.0 ) 计算字符串的长度 转化为浮点数来计算0x03 2 0y 0x12 都返回 1set a 1 expr $a+2 expr 1+2 都返回 3窗体底端窗体顶端TCL语言Tcl (最早称为“工具命令语言”Tool Command Language, 但是目前已经不是这个含义,不过我们仍然称呼它为TCL)是一种 脚本语言。 由John Ousterhout创建。 TCL很好学,功能很强大。TCL经常被用于 快速原

11、型开发,脚本编程, GUI和测试等方面。TCL念作“踢叩” tickle. Tcl的特性包括:* 任何东西都是一条命令,包括语法结构(for, if等)。* 任何事物都可以重新定义和重载。* 所有的数据类型都可以看作字符串。* 语法规则相当简单* 提供事件驱动给Socket和文件。基于时间或者用户定义的事件也可以。* 动态的域定义。* 很容易用C, C+,或者Java扩展。* 解释语言,代码能够动态的改变。* 完全的Unicode支持。* 平台无关。Win32, UNIX, Mac 上都可以跑。* 和Windows的GUI紧密集成。 Tk* 代码紧凑,易于维护。TCL本身不提供面向对象的支持。

12、但是语言本身很容易扩展到支持面向对象。许多C语言扩展都提供面向对象能力,包括XOTcl, Incr Tcl 等。另外SNIT扩展本身就是用TCL写的。使用最广泛的TCL扩展是TK。 TK提供了各种OS平台下的图形用户界面GUI。连强大的Python语言都不单独提供自己的GUI,而是提供接口适配到TK上。另一个流行的扩展包是Expect. Expect提供了通过终端自动执行命令的能力,例如(passwd, ftp, telnet等命令驱动的外壳).下面是TCL程序的例子:#!/bin/sh# next line restarts using tclsh in path exec tclsh $1

13、+$# echo server that can handle multiple # simultaneous connections.proc newConnection sock addr port # client connections will be handled in# line-buffered, non-blocking modefconfigure $sock -blocking no -buffering line# call handleData when socket is readablefileevent $sock readable list handleDat

14、a $sock proc handleData puts $sock gets $sock if eof $sock close $sock# handle all connections to port given# as argument when server was invoked# by calling newConnectionset port lindex $argv 0 socket -server newConnection $port# enter the event loop by waiting# on a dummy variable that is otherwis

15、e# unused.vwait forever另外一个TK的例子 (来自 A simple A/D clock) 它使用了定时器时间,3行就显示了一个时钟。proc every ms body eval $body; after $ms info level 0pack label .clock -textvar timeevery 1000 set :time clock format clock sec -format %H:%M:%S ;# RS解释:第一行定义了过程every, 每隔ms毫秒,就重新执行body代码。第二行创建了标签起内容由time变量决定。第3行中设置定时器,time

16、变量从当前时间中每秒更新一次。 Tcl被广泛的用做script语言,大多数情况下,Tcl和Tk(“Tool Kit”)库同时使用,Tk是一系列令Tcl易于编写图形用户接口的命令和过程Tcl的一个重要特性是它的扩展性。如果一个程序需要使用某些标准Tcl没有提供的功能,可以使用c语言创造一些新的Tcl命令,并很容易的融合进去。正是由于Tcl易于扩展,很多人为它编写了扩展包,并在网上共享。Tcl和其他编程语言例如c不同,它是一种解释语言而非编译语言。Tcl程序由一系列Tcl命令组成,在运行时由Tcl解释器解释运行。解释运行的一个优点是它可以自己为自己生成Tcl script。变量和变量交换不像c,T

17、cl的变量在使用前不需要声明。Tcl的变量在它首次被赋值时产生,使用set命令。变量可以用unset命令删除,虽然并不强制需要这样做。变量的值通过$符号访问,也叫变量交换。Tcl是一个典型的”弱类型定义”语言,这意味者任何类型可以存储在任何变量中。例如,同一个变量可以存储数字,日期,字符串甚至另一段Tcl script.Example 1.1:set foo johnputs Hi my name is $fooOutput: Hi my name is johnExample 1.2:set month 2 set day 3 set year 97 set date $month:$day

18、:$year puts $dateOutput: 2:3:97Example 1.3:set foo puts hi eval $fooOutput: hi在这个例子里,变量foo存储了另外一段Tcl script.表达式包括数学表达式,关系表达式,通常用 expr命令。Example 2.1:expr 0 = 1Output: 0Example 2.2:expr 1 = 1Output: 1两数比较,true则输出1,false输出0Example 2.3:expr 4 + 5Output: 9Example 2.4:expr sin(2)Output: 0.909297命令传递以运算结果替

19、代Tcl命令中的部分Example 3.1:puts I am expr 10 * 2 years old, and my I.Q. is expr 100 - 25Output: I am 20 years old, and my I.Q. is 75方括号是命令传递的标志Example 3.2:set my_height 6.0 puts If I was 2 inches taller, I would be expr $my_height + (2.0 / 12.0) feet tallOutput: If I was 2 inches taller, I would be 6.166

20、67 feet tall命令流控制Tcl有判断流转(if-else; switch)和循环控制(while; for; foreach)Example 4.1:set my_planet earth if $my_planet = earth puts I feel right at home. elseif $my_planet = venus puts This is not my home. else puts I am neither from Earth, nor from Venus. set temp 95if $temp 80 puts Its a little chilly.

21、 else puts Warm enough for me. Output: I feel right at home.Warm enough for me.Example 4.2:set num_legs 4switch $num_legs 2 puts It could be a human.4 puts It could be a cow.6 puts It could be an ant.8 puts It could be a spider.default puts It could be anything. Output: It could be a cow.Example 4.3

22、:for set i 0 $i 10 incr i 1 puts In the for loop, and i = $iOutput: In the for loop, and i = 0In the for loop, and i = 1In the for loop, and i = 2In the for loop, and i = 3In the for loop, and i = 4In the for loop, and i = 5In the for loop, and i = 6In the for loop, and i = 7In the for loop, and i =

23、 8In the for loop, and i = 9Example 4.4:set i 0while $i 0 return $num set num expr $num * (-1)return $num set num1 12set num2 14set sum sum_proc $num1 $num2 puts The sum is $sumputs The magnitude of 3 is magnitude 3puts The magnitude of -2 is magnitude -2 Output: The sum is 26The magnitude of 3 is 3

24、The magnitude of -2 is 2在procedure中可以通过set创造变量,但是变量只在procedure中有效,而且一旦procedure返回,这些变量就不可访问。如果procedure需要访问主程序中的变量,就需要使用global关键字。Example 5.2:proc dumb_proc set myvar 4puts The value of the local variable is $myvar global myglobalvarputs The value of the global variable is $myglobalvar set myglobalv

25、ar 79dumb_procOutput: The value of the local variable is 4The value of the global variable is 79ListsLists就好像是Tcl中的一种特殊的数组。它把一堆东西放成一个集合,然后就像操作一个整体一样的操作它。Example 6.1:set simple_list John Joe Mary Susanputs lindex $simple_list 0puts lindex $simple_list 2Output: JohnMary注意list的index是从0开始的Example 6.2:se

26、t simple_list2 Mike Sam Heather Jenniferset compound_list list $simple_list $simple_list2puts $compound_listputs llength $compound_listOutput: John Joe Mary Susan Mike Sam Heather Jennifer2Example 6.3:set mylist Mercury Venus Marsputs $mylistset mylist linsert $mylist 2 Earthputs $mylistlappend myli

27、st Jupiterputs $mylistOutput: Mercury Venus MarsMercury Venus Earth MarsMercury Venus Earth Mars JupiterArraysTcl数组在使用前无须定义,大小也不用指定。 Example 7.1:set myarray(0) Zeroset myarray(1) Oneset myarray(2) Two for set i 0 $i 3 incr i 1 puts $myarray($i) Output: ZeroOneTwoExample 7.2:set person_info(name) Fre

28、d Smithset person_info(age) 25set person_info(occupation) Plumber foreach thing name age occupation puts $thing = $person_info($thing) Output: name = Fred Smithage = 25occupation = Plumber这个例子指出数组的index不需要是数字,其他类型的数据也可以。Example 7.3:set person_info(name) Fred Smithset person_info(age) 25set person_in

29、fo(occupation) Plumber foreach thing array names person_info puts $thing = $person_info($thing) Output: occupation = Plumberage = 25name = Fred SmithStrings字符串是Tcl中最常用的类型,string有很多使用参数,可以参照Tcl手册。使用方法:string option arg arg .Example 8.1:set str This is a string puts The string is: $strputs The length

30、of the string is: string length $str puts The character at index 3 is: string index $str 3puts The characters from index 4 through 8 are: string range $str 4 8puts The index of the first occurrence of letter i is: string first i $strOutput:The string is: This is a stringThe length of the string is:

31、16The character at index 3 is: sThe characters from index 4 through 8 are: is aThe index of the first occurrence of letter i is: 2Input/OutputTcl的绝大多数输入/输出是通过puts和gets做到的。Puts命令显示在console上,gets命令从console输入上取得数据,并存储在某个变量中。gets channelId varNamechannelID可以理解为c的文件句柄,varName如果定义,输入值就赋给它,gets返回读入的字节数,否则g

32、ets直接返回输入值。Example 9.1:puts -nonewline Enter your name: set bytesread gets stdin name puts Your name is $name, and it is $bytesread bytes long Output: (note that user input is shown in italics)Enter your name: ShyamYour name is Shyam, and it is 5 bytes longExample 9.2: set f open /tmp/myfile w puts

33、$f We live in Texas. Its already 110 degrees out here.puts $f 456 close $fOutput: (none)Open打开了一个 /tmp/myfile 作为channel. 用法是:open name accessaccess参数指出打开文件的方式,”w”是读写。这时可以用puts $f把内容写入文件Example 9.3: set f open /tmp/myfile r set line1 gets $fset len_line2 gets $f line2 close $f puts line 1: $line1puts

34、 line 2: $line2puts Length of line 2: $len_line2Output:line 1: We live in Texas. Its already 110 degrees out here.line 2: 456Length of line 2: 3这个例子假设已知文件只有两行,如果不是,则需要使用循环,用eof来找到文件尾。evaleval命令会把它的参数直接送往解释器。Example 10.1:set foo set a 22eval $fooputs $aOutput:22单纯的执行$foo不会成功。catchExample 10.2: set re

35、tval catch set f open nosuchfile r if $retval = 1 puts An error occuredOutput: (this output occurs if there is no file named nosuchfile in the current directory).An error occuredCatch 参数记录一个script的执行情况,如果返回值为1,则执行出错。用来进行错误处理。修订记录用于说明对文档加附页或文档版本升级时对文档的改动情况,一般设计类文档1引言62语法72.1脚本、命令和单词符号72.2置换(substitut

36、ion)72.2.1变量置换(variable subtitution)82.2.2命令置换(command substitution)82.2.3反斜杠置换(backslash substitution)82.2.4双引号和花括号 92.3注释93变量103.1简单变量103.2数组113.3相关命令113.3.1set113.3.2unset113.3.3append和incr124表达式124.1操作数124.2运算符和优先级 124.3数学函数135List145.1list命令145.2concat命令:145.3lindex命令155.4llength命令155.5linsert命

37、令155.6lreplace命令:155.7lrange 命令:155.8lappend命令:155.9lsearch 命令:165.10lsort命令:165.11split命令:165.12join命令176控制流176.1if命令176.2循环命令:while 、for、 foreach176.2.1while命令176.2.2for命令186.2.3foreach命令186.2.4break和continue命令196.2.5switch 命令196.1eval命令196.2source命令197过程(procedure)207.1过程定义和返回值207.2局部变量和全局变量207.3

38、缺省参数和可变个数参数217.4引用:upvar218字符串操作228.1format命令228.2scan命令238.3regexp命令238.4regsub命令258.5string命令258.5.1string compare ?-nocase? ?-length int? string1 string2258.5.2string equal ?-nocase? ?-length int? string1 string2258.5.3string first string1 string2 ?startindex?268.5.4string index string charIndex2

39、68.5.5string last string1 string2 ?startindex?268.5.6string length string268.5.7string match ?-nocase? pattern string268.5.8string range string first last278.5.9string repeat string count278.5.10string replace string first last ?newstring?278.5.11string tolower string ?first? ?last?278.5.12string to

40、upper string ?first? ?last?278.5.13 string trim string ?chars?278.5.14string trimleft string ?chars?278.5.15string trimright string ?chars?279文件访问289.1文件名289.2基本文件输入输出命令289.3随机文件访问29309.5文件操作和获取文件信息3010错误和异常3310.1错误3310.2从TCL脚本中产生错误3410.3使用catch捕获错误3510.4其他异常3511深入TCL3711.1查询数组中的元素3711.2 info命令3811.

41、2.1变量信息3811.2.2过程信息3911.2.3命令信息4011.2.4 TCL的版本和库4111.2.5 命令的执行时间4111.2.6 跟踪变量4111.2.7 命令的重命名和删除4311.2.8 unknown命令4411.2.9自动加载4412历史记录4513TCL和CC+4713.1生成自己的TCLSH4813.2扩展自己的命令:方法(一)4813.2.1编写扩展命令对应的C/C+过程4813.2.2注册命令4913.2.3命令返回值和命令对应的过程的返回值5013.3扩展自己的命令:方法(二)5213.3.1Tcl_Obj结构5213.3.2编写扩展命令对应的C/C+过程54

42、13.3.3注册命令5413.4利用clientData参数和deleteProc参数5513.5在C/C+应用程序中嵌入TCL5814总结59引言TCL(Tool Command Language)是一种解释执行的脚本语言(Scripting Language)。 它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。由于TCL的解释器是用一个CC+语言的过程库实现的,因此在某种意义上我们又可以把TCL看作一个C库,这个库中有丰富的用于扩展TCL命令的CC+过程和函数,可以很容易就在CC+应用程序中嵌入TCL,而且每个应用程序都可以根据自己的需要对

43、TCL语言进行扩展。我们可以针对某一特定应用领域对TCL语言的核心命令集进行扩展,加入适合于自己的应用领域的扩展命令,如果需要,甚至可以加入新的控制结构,TCL解释器将把扩展命令和扩展控制结构与固有命令和固有控制结构同等看待。扩展后的TCL语言将可以继承TCL 核心部分的所有功能,包括核心命令、控制结构、数据类型、对过程的支持等。根据需要,我们甚至可以屏蔽掉TCL的某些固有命令和固有控制结构。通过对TCL的扩展、继承或屏蔽,用户用不着象平时定义一种计算机语言那样对词法、语法、语义、语用等各方面加以定义,就可以方便的为自己的应用领域提供一种功能完备的脚本语言。TCL良好的可扩展性使得它能很好地适

44、应产品测试的需要,测试任务常常会由于设计和需求的改变而迅速改变,往往让测试人员疲于应付。利用TCL的可扩展性,测试人员就可以迅速继承多种新技术,并针对产品新特点迅速推出扩展TCL命令集,以用于产品的测试中,可以较容易跟上设计需求的变化。另外,因为TCL是一种比CC+ 语言有着更高抽象层次的语言,使用TCL可以在一种更高的层次上编写程序,它屏蔽掉了编写CC+程序时必须涉及到的一些较为烦琐的细节,可以大大地提高开发测试例的速度。而且, 使用TCL语言写的测试例脚本,即使作了修改,也用不着重新编译就可以调用TCL解释器直接执行。可以省却不少时间。TCL 目前已成为自动测试中事实上的标准。1 语法简单

45、的讲,TCL语言的语法实际上是一些TCL解释器怎样对TCL命令进行分析的规则的集合。1.1 脚本、命令和单词符号一个TCL脚本可以包含一个或多个命令。命令之间必须用换行符或分号隔开,下面的两个脚本都是合法的:set a 1set b 2或set a 1;set b 2TCL的每一个命令包含一个或几个单词,第一个单词代表命令名,另外的单词则是这个命令的参数,单词之间必须用空格或TAB键隔开。TCL解释器对一个命令的求值过程分为两部分:分析和执行。在分析阶段,TCL 解释器运用规则把命令分成一个个独立的单词,同时进行必要的置换(substitution); 在执行阶段,TCL 解释器会把第一个单词

46、当作命令名,并查看这个命令是否有定义,如果有定义就激活这个命令对应的C/C+过程,并把所有的单词作为参数传递给该命令过程,让命令过程进行处理。1.2 置换(substitution)注:在下面的所有章节的例子中,为TCL的命令提示符,输入命令回车后,TCL会在接着的一行输出命令执行结果。/后面是我自己加上的说明,不是例子的一部分。TCL解释器在分析命令时,把所有的命令参数都当作字符串看待,例如:%set x 10 /定义变量x,并把x的值赋为1010%set y x+100 /y的值是x+100,而不是我们期望的110x+100上例的第二个命令中,x被看作字符串x+100的一部分,如果我们想使

47、用x的值10 ,就必须告诉TCL解释器:我们在这里期望的是变量x的值,而非字符x。怎么告诉TCL解释器呢,这就要用到TCL语言中提供的置换功能。TCL提供三种形式的置换:变量置换、命令置换和反斜杠置换。每种置换都会导致一个或多个单词本身被其他的值所代替。置换可以发生在包括命令名在内的每一个单词中,而且置换可以嵌套。1.2.1 变量置换(variable subtitution)变量置换由一个符号标记,变量置换会导致变量的值插入一个单词中。例如:%set y $x+100 /y的值是10+100,这里x被置换成它的值1010100这时,y的值还不是我们想要的值110,而是10+100,因为TCL

48、解释器把10+100看成是一个字符串而不是表达式,y要想得到值110,还必须用命令置换,使得TCL会把10+100看成一个表达式并求值。1.2.2 命令置换(command substitution)命令置换是由括起来的TCL命令及其参数,命令置换会导致某一个命令的所有或部分单词被另一个命令的结果所代替。例如:%set y expr $x+100110y的值是110,这里当TCL解释器遇到字符时,它就会把随后的expr作为一个命令名,从而激活与expr对应的C/C+过程,并把expr和变量置换后得到的10+110传递给该命令过程进行处理。如果在上例中我们去掉,那么TCL会报错。因为在正常情况下

49、,TCL解释器只把命令行中的第一个单词作为看作命令,其他的单词都作为普通字符串处理,看作是命令的参数。 注意,中必须是一个合法的TCL脚本,长度不限。中脚本的值为最后一个命令的返回值,例如:%set y expr $x+100;set b 300 /y的值为300,因为set b 300的返回值为300300有了命令置换,实际上就表示命令之间是可以嵌套的,即一个命令的结果可以作为别的命令的参数。1.2.3 反斜杠置换(backslash substitution)TCL语言中的反斜杠置换类似于C语言中反斜杠的用法,主要用于在单词符号中插入诸如换行符、空格、$等被TCL解释器当作特殊符号对待的字

50、符。例如:set msg multiple space /msg的值为multiple space。如果没有的话,TCL会报错,因为解释器会把这里最后两个单词之间的空格认为是分隔符,于是发现set命令有多于两个参数,从而报错。加入了后,空格不被当作分隔符,multiple space被认为是一个单词(word)。又例如: %set msg money $3333 nArray a2 /这个命令的执行结果为:money $3333 Array a2这里的$不再被当作变量置换符。TCL支持以下的反斜杠置换:Backslash Sequence Replaced Bya Audible alert

51、(0x7)b Backspace (0x8)f Form feed (0xc)n Newline (0xa)r Carriage return (0xd)t Tab (0x9)v Vertical tab (0xb)ddd Octal value given by ddd(one, two, or three ds)xhh Hex value given by hh(any number of hs) newline space A single space character.例如: set a x48 /对应 xhhH /十六进制的48正好是72,对应H set a 110 /对应 ddd

52、H /八进制的110正好是72,对应Hset a expr / 对应newline space,一个命令可以用newline转到下一行继续 2+351.2.4 双引号和花括号 除了使用反斜杠外,TCL提供另外两种方法来使得解释器把分隔符和置换符等特殊字符当作普通字符,而不作特殊处理,这就要使用双引号和花括号()。TCL解释器对双引号中的各种分隔符将不作处理,但是对换行符 及和两种置换符会照常处理。例如:%set x 100100%set y $x ddd 100 ddd而在花括号中,所有特殊字符都将成为普通字符,失去其特殊意义,TCL解释器不会对其作特殊处理。%set y /n$x expr 10+100 /n$x expr 10+100 1.3 注释TCL中的注释符是,和直到所在行结尾的所有字符都被TCL看作注释,TCL解释器对注释将不作任何处理。不过,要注意的是,必须出现在TCL解释器期望命令的第一个字符出现的地方,才被当作注释。例如:%This is a comment%set a 100 # Not a commentwrong # args: should be set varName ?newValue?%set b 101 ; # this is a comment101第二行中就不被当作注释符,因

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!