




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、Tcl編程簡介(一)簡介 Tcl是一種很通用的腳本語言,它幾乎在所有的平臺上都可以解釋運行,功能強大。是tool command language的縮寫,發(fā)音為 tickle”, 實際上包含了兩個部分:一個語言和一個庫。首先,Tcl是一種簡單的腳本語言,主要使用于發(fā)布命令給一 些互交程序如文本編輯器、調(diào)試器和shell。它有一個簡單的語法 和很強可擴充性,Tcl可以創(chuàng)建新的過程以增強其內(nèi)建命令的能力。其次,Tcl是一個庫包,可以被嵌入應(yīng)用程序,Tcl的庫包含了一個分析器、用于執(zhí)行內(nèi)建命令的例程和可以使你擴充(定義新的 過程)的庫函數(shù)。應(yīng)用程序可以產(chǎn)生Tcl命令并執(zhí)行,命令可以由用戶產(chǎn)生,也可以
2、從用戶接口的一個輸入中讀取(按鈕或菜單等)。 但Tcl庫收到命令后將它分解并執(zhí)行內(nèi)建的命令,經(jīng)常會產(chǎn)生遞歸的調(diào)用。下面簡單介紹以下tcl的語法規(guī)則:解釋器在Tcl的數(shù)據(jù)結(jié)構(gòu)中的核心是Tcl_Interp.一個解釋器包含了一套命令,一組變量和一些用于描述狀態(tài)的東西。每一個 Tcl命令是 在特定的Tcl_Interp中運行的,基于Tcl的應(yīng)用程序可以同時擁有幾個Tcl_Interp。Tcl_Interp是一個輕量級的結(jié)構(gòu),可以快速的新建和刪除。數(shù)據(jù)類型Tcl只支持一種數(shù)據(jù)結(jié)構(gòu):字符串(string)。所有的命令,命令的所有的參數(shù),命令的結(jié)果,所有的變量都是字符串。請牢記這一點,所有的東西都是字符串
3、。 這是它比較有特點的方面字符串有三種形式:命令(command), 表達式(expresion)和表(list)。Basic Command Syntax 基本語法Tcl有類似于shell和lisp的語法,當然也有許多的不同。一 條Tcl的命令串包含了一條或多條命令用換行符或分號來隔開,而每一條命令包含了一個域(field)的集合,域使用空白分開的,第一個域是一個命令的名字,其它的是作為參數(shù)來傳給它。例如:set a 22 /相當于C中的 a=22 a是一個變量這條命令分為三個域:1 set 2 a 3 22 set使用于設(shè)置變量的值的命令,a、20 作為參數(shù)來傳給它,a使它要操作的變量名,
4、22是要付給的a值。Tcl的命令名可以是內(nèi)置的命令也可以是用戶建的新命令,如果是用戶用戶建的新命令應(yīng)用程序中用函數(shù)Tcl_CreateCommand來創(chuàng)建。所有的參數(shù)作為字符串來傳遞,命令自己會按其所需來解釋的參數(shù)的。命令的名字必須被打全,但 Tcl解釋器找不到一同名的命令時會用 unknown命令來代替。在很多場合下,unknown 會在庫目錄中搜尋,找到一個的話,會自動生成一個Tcl命令并調(diào)用它。unknown經(jīng)常完成縮略的命令名的執(zhí)行。但最好不要使用。注釋和shell很象,第一個字母是#的Tcl字符串是注釋。其他細節(jié)規(guī)則Grouping arguments with double-quo
5、tes 用雙引號來集群參數(shù),目的在于使用有空白的參數(shù)。例如:set a this string contains whitespace 如夠一個參數(shù)一雙引號來開始,該參數(shù)會一直到下一個雙引號才結(jié)束。其中可以有換行符和分號。Variable substitution with $ 用美元符進行變量替換說白了就是引用該變量。如:set a hello set b $a / b = hello 實際上傳給set命令的參數(shù) /是b,hello set c a / b = a Command substitution with brackets 命令子替換(用方括號)例如:set a set b hel
6、lo 實現(xiàn)執(zhí)行 set b hello 并用其結(jié)果來替換源命令 中的方括號部分,產(chǎn)生一條新命令set a hello /hello 為 set b hello 的返回值最終的結(jié)果是b=hello a=hello當命令的一個子域以方括號開始以方括號結(jié)束,表示要進行一個命令子替換。并執(zhí)行該子命令,用其結(jié)果來替換原命令中的方括號部分。方括號中的部分都被視為Tcl命令。如下一個復(fù)雜一點的例子:set a xyzset b abc.set c def /return xyzabcdef Backslash substitution 轉(zhuǎn)移符替換轉(zhuǎn)移符時間不可打印字符或由它數(shù)意義的字符插入進來。這一概念與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 用花擴括號來集群參數(shù)用花擴括號來集群參數(shù)與用雙引號來集群參數(shù)的區(qū)別在于:用花擴括號來集群參數(shù)其中的三種上述的子替換不被執(zhí)行。而且可以嵌套。例如:set a xyz a b c d/set收到倆個參數(shù) a xyz a b c d eval set a 22 set b 33 /eval收到一個參數(shù) set a 22set b 33 命令綜述1.一個命令就是一個字符串(string)。2.命令是用換行符或分號來分隔的。3.一個命令由許多的域組成。第一個于是命令名,其它的域作為參數(shù)來傳遞。4.域通常是有空白(Tab橫向制表健 Space空格)
9、來分開的。5.雙引號可以使一個參數(shù)包括換行符或分號。三種子替換仍然發(fā)生。6.花括號類似于雙引號,只是不進行三總體換。7.系統(tǒng)只進行一層子替換,機制替換的結(jié)果不會再去做子替換。而且子替換可以在任何一個域進行。8.如果第一個非控字符是#, 這一行的所有東西都是注釋。表達式對字符串的一種解釋是表達式。幾個命令將其參數(shù)按表達式處理,如:expr、for 和 if,并調(diào)用Tcl表達式處理器(Tcl_ExprLong, Tcl_ExprBoolean等)來處理它們。其中的運算符與C語言的很相似。邏輯非* / % + - 左移 右移 只能用于整數(shù)。 = = != 邏輯比較& | 位運算 和 異或 或& 邏輯
10、和 或x ? y : z If-then-else 與C的一樣Tcl 中的邏輯真為1,邏輯假為0。一些例子:5 / 4.0 5 / ( string length abcd + 0.0 ) 計算字符串的長度 轉(zhuǎn)化為浮點數(shù)來計算0x03 2 0y 0x12 都返回 1set a 1 expr $a+2 expr 1+2 都返回 3窗體底端窗體頂端TCL語言Tcl (最早稱為“工具命令語言”Tool Command Language, 但是目前已經(jīng)不是這個含義,不過我們?nèi)匀环Q呼它為TCL)是一種 腳本語言。 由John Ousterhout創(chuàng)建。 TCL很好學(xué),功能很強大。TCL經(jīng)常被用于 快速原
11、型開發(fā),腳本編程, GUI和測試等方面。TCL念作“踢叩” tickle. Tcl的特性包括:* 任何東西都是一條命令,包括語法結(jié)構(gòu)(for, if等)。* 任何事物都可以重新定義和重載。* 所有的數(shù)據(jù)類型都可以看作字符串。* 語法規(guī)則相當簡單* 提供事件驅(qū)動給Socket和文件。基于時間或者用戶定義的事件也可以。* 動態(tài)的域定義。* 很容易用C, C+,或者Java擴展。* 解釋語言,代碼能夠動態(tài)的改變。* 完全的Unicode支持。* 平臺無關(guān)。Win32, UNIX, Mac 上都可以跑。* 和Windows的GUI緊密集成。 Tk* 代碼緊湊,易于維護。TCL本身不提供面向?qū)ο蟮闹С帧?/p>
12、但是語言本身很容易擴展到支持面向?qū)ο蟆TS多C語言擴展都提供面向?qū)ο竽芰Γ╔OTcl, Incr Tcl 等。另外SNIT擴展本身就是用TCL寫的。使用最廣泛的TCL擴展是TK。 TK提供了各種OS平臺下的圖形用戶界面GUI。連強大的Python語言都不單獨提供自己的GUI,而是提供接口適配到TK上。另一個流行的擴展包是Expect. Expect提供了通過終端自動執(zhí)行命令的能力,例如(passwd, ftp, telnet等命令驅(qū)動的外殼).下面是TCL程序的例子:#!/bin/sh# next line restarts using tclsh in path exec tclsh $1
13、+$# echo server that can handle multiple # simultaneous c 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毫秒,就重新執(zhí)行body代碼。第二行創(chuàng)建了標簽起內(nèi)容由time變量決定。第3行中設(shè)置定時器,time
16、變量從當前時間中每秒更新一次。 Tcl被廣泛的用做script語言,大多數(shù)情況下,Tcl和Tk(“Tool Kit”)庫同時使用,Tk是一系列令Tcl易于編寫圖形用戶接口的命令和過程Tcl的一個重要特性是它的擴展性。如果一個程序需要使用某些標準Tcl沒有提供的功能,可以使用c語言創(chuàng)造一些新的Tcl命令,并很容易的融合進去。正是由于Tcl易于擴展,很多人為它編寫了擴展包,并在網(wǎng)上共享。Tcl和其他編程語言例如c不同,它是一種解釋語言而非編譯語言。Tcl程序由一系列Tcl命令組成,在運行時由Tcl解釋器解釋運行。解釋運行的一個優(yōu)點是它可以自己為自己生成Tcl script。變量和變量交換不像c,T
17、cl的變量在使用前不需要聲明。Tcl的變量在它首次被賦值時產(chǎn)生,使用set命令。變量可以用unset命令刪除,雖然并不強制需要這樣做。變量的值通過$符號訪問,也叫變量交換。Tcl是一個典型的”弱類型定義”語言,這意味者任何類型可以存儲在任何變量中。例如,同一個變量可以存儲數(shù)字,日期,字符串甚至另一段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.表達式包括數(shù)學(xué)表達式,關(guān)系表達式,通常用 expr命令。Example 2.1:expr 0 = 1Output: 0Example 2.2:expr 1 = 1Output: 1兩數(shù)比較,true則輸出1,false輸出0Example 2.3:expr 4 + 5Output: 9Example 2.4:expr sin(2)Output: 0.909297命令傳遞以運算結(jié)果替
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有判斷流轉(zhuǎn)(if-else; switch)和循環(huán)控制(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創(chuàng)造變量,但是變量只在procedure中有效,而且一旦procedure返回,這些變量就不可訪問。如果procedure需要訪問主程序中的變量,就需要使用global關(guān)鍵字。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中的一種特殊的數(shù)組。它把一堆東西放成一個集合,然后就像操作一個整體一樣的操作它。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數(shù)組在使用前無須定義,大小也不用指定。 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這個例子指出數(shù)組的index不需要是數(shù)字,其他類型的數(shù)據(jù)也可以。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有很多使用參數(shù),可以參照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的絕大多數(shù)輸入/輸出是通過puts和gets做到的。Puts命令顯示在console上,gets命令從console輸入上取得數(shù)據(jù),并存儲在某個變量中。gets channelId varNamechannelID可以理解為c的文件句柄,varName如果定義,輸入值就賦給它,gets返回讀入的字節(jié)數(shù),否則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參數(shù)指出打開文件的方式,”w”是讀寫。這時可以用puts $f把內(nèi)容寫入文件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這個例子假設(shè)已知文件只有兩行,如果不是,則需要使用循環(huán),用eof來找到文件尾。evaleval命令會把它的參數(shù)直接送往解釋器。Example 10.1:set foo set a 22eval $fooputs $aOutput:22單純的執(zhí)行$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 參數(shù)記錄一個script的執(zhí)行情況,如果返回值為1,則執(zhí)行出錯。用來進行錯誤處理。修訂記錄用于說明對文檔加附頁或文檔版本升級時對文檔的改動情況,一般設(shè)計類文檔1引言62語法72.1腳本、命令和單詞符號72.2置換(substitut
36、ion)7變量置換(variable subtitution)8命令置換(command substitution)8反斜杠置換(backslash substitution)8雙引號和花括號 92.3注釋93變量103.1簡單變量103.2數(shù)組113.3相關(guān)命令113.3.1set11unset11ppend和incr124表達式124.1操作數(shù)124.2運算符和優(yōu)先級 124.3數(shù)學(xué)函數(shù)135List145.1list命令145.2concat命令:145.3lindex命令155.4llength命令155.5linsert命令155.6lreplace命令:155.7lrange 命令
37、:155.8lappend命令:155.9lsearch 命令:165.10lsort命令:165.11split命令:165.12join命令176控制流176.1if命令176.2循環(huán)命令:while 、for、 foreach17while命令17for命令18foreach命令18break和continue命令19switch 命令196.1eval命令196.2source命令197過程(procedure)207.1過程定義和返回值207.2局部變量和全局變量207.3缺省參數(shù)和可變個數(shù)參數(shù)217.4引用:upvar218字符串操作228.1format命令228.2scan命令
38、238.3regexp命令238.4regsub命令258.5string命令25string compare ?-nocase? ?-length int? string1 string225string equal ?-nocase? ?-length int? string1 string225string first string1 string2 ?startindex?26string index string charIndex26string last string1 string2 ?startindex?26string length string26string matc
39、h ?-nocase? pattern string26string range string first last27string repeat string count27string replace string first last ?newstring?27string tolower string ?first? ?last?27string toupper string ?first? ?last?27 string trim string ?chars?27string trimleft string ?chars?27string trimright string ?char
40、s?279文件訪問289.1文件名289.2基本文件輸入輸出命令289.3隨機文件訪問29309.5文件操作和獲取文件信息3010錯誤和異常3310.1錯誤3310.2從TCL腳本中產(chǎn)生錯誤3410.3使用catch捕獲錯誤3510.4其他異常3511深入TCL3711.1查詢數(shù)組中的元素3711.2 info命令38變量信息38過程信息39命令信息40 TCL的版本和庫41 命令的執(zhí)行時間41 跟蹤變量41 命令的重命名和刪除43 unknown命令44自動加載4412歷史記錄4513TCL和CC+4713.1生成自己的TCLSH4813.2擴展自己的命令:方法(一)48編寫擴展命令對應(yīng)的C
41、/C+過程48注冊命令49命令返回值和命令對應(yīng)的過程的返回值5013.3擴展自己的命令:方法(二)52Tcl_Obj結(jié)構(gòu)52編寫擴展命令對應(yīng)的C/C+過程54注冊命令5413.4利用clientData參數(shù)和deleteProc參數(shù)5513.5在C/C+應(yīng)用程序中嵌入TCL5814總結(jié)59引言TCL(Tool Command Language)是一種解釋執(zhí)行的腳本語言(Scripting Language)。 它提供了通用的編程能力:支持變量、過程和控制結(jié)構(gòu);同時TCL還擁有一個功能強大的固有的核心命令集。由于TCL的解釋器是用一個CC+語言的過程庫實現(xiàn)的,因此在某種意義上我們又可以把TCL看
42、作一個C庫,這個庫中有豐富的用于擴展TCL命令的CC+過程和函數(shù),可以很容易就在CC+應(yīng)用程序中嵌入TCL,而且每個應(yīng)用程序都可以根據(jù)自己的需要對TCL語言進行擴展。我們可以針對某一特定應(yīng)用領(lǐng)域?qū)CL語言的核心命令集進行擴展,加入適合于自己的應(yīng)用領(lǐng)域的擴展命令,如果需要,甚至可以加入新的控制結(jié)構(gòu),TCL解釋器將把擴展命令和擴展控制結(jié)構(gòu)與固有命令和固有控制結(jié)構(gòu)同等看待。擴展后的TCL語言將可以繼承TCL 核心部分的所有功能,包括核心命令、控制結(jié)構(gòu)、數(shù)據(jù)類型、對過程的支持等。根據(jù)需要,我們甚至可以屏蔽掉TCL的某些固有命令和固有控制結(jié)構(gòu)。通過對TCL的擴展、繼承或屏蔽,用戶用不著象平時定義一種計
43、算機語言那樣對詞法、語法、語義、語用等各方面加以定義,就可以方便的為自己的應(yīng)用領(lǐng)域提供一種功能完備的腳本語言。TCL良好的可擴展性使得它能很好地適應(yīng)產(chǎn)品測試的需要,測試任務(wù)常常會由于設(shè)計和需求的改變而迅速改變,往往讓測試人員疲于應(yīng)付。利用TCL的可擴展性,測試人員就可以迅速繼承多種新技術(shù),并針對產(chǎn)品新特點迅速推出擴展TCL命令集,以用于產(chǎn)品的測試中,可以較容易跟上設(shè)計需求的變化。另外,因為TCL是一種比CC+ 語言有著更高抽象層次的語言,使用TCL可以在一種更高的層次上編寫程序,它屏蔽掉了編寫CC+程序時必須涉及到的一些較為煩瑣的細節(jié),可以大大地提高開發(fā)測試例的速度。而且, 使用TCL語言寫的
44、測試例腳本,即使作了修改,也用不著重新編譯就可以調(diào)用TCL解釋器直接執(zhí)行。可以省卻不少時間。TCL 目前已成為自動測試中事實上的標準。1 語法簡單的講,TCL語言的語法實際上是一些TCL解釋器怎樣對TCL命令進行分析的規(guī)則的集合。1.1 腳本、命令和單詞符號一個TCL腳本可以包含一個或多個命令。命令之間必須用換行符或分號隔開,下面的兩個腳本都是合法的:set a 1set b 2或set a 1;set b 2TCL的每一個命令包含一個或幾個單詞,第一個單詞代表命令名,另外的單詞則是這個命令的參數(shù),單詞之間必須用空格或TAB鍵隔開。TCL解釋器對一個命令的求值過程分為兩部分:分析和執(zhí)行。在分析
45、階段,TCL 解釋器運用規(guī)則把命令分成一個個獨立的單詞,同時進行必要的置換(substitution); 在執(zhí)行階段,TCL 解釋器會把第一個單詞當作命令名,并查看這個命令是否有定義,如果有定義就激活這個命令對應(yīng)的C/C+過程,并把所有的單詞作為參數(shù)傳遞給該命令過程,讓命令過程進行處理。1.2 置換(substitution)注:在下面的所有章節(jié)的例子中,為TCL的命令提示符,輸入命令回車后,TCL會在接著的一行輸出命令執(zhí)行結(jié)果。/后面是我自己加上的說明,不是例子的一部分。TCL解釋器在分析命令時,把所有的命令參數(shù)都當作字符串看待,例如:%set x 10 /定義變量x,并把x的值賦為1010
46、%set y x+100 /y的值是x+100,而不是我們期望的110x+100上例的第二個命令中,x被看作字符串x+100的一部分,如果我們想使用x的值10 ,就必須告訴TCL解釋器:我們在這里期望的是變量x的值,而非字符x。怎么告訴TCL解釋器呢,這就要用到TCL語言中提供的置換功能。TCL提供三種形式的置換:變量置換、命令置換和反斜杠置換。每種置換都會導(dǎo)致一個或多個單詞本身被其他的值所代替。置換可以發(fā)生在包括命令名在內(nèi)的每一個單詞中,而且置換可以嵌套。1.2.1 變量置換(variable subtitution)變量置換由一個符號標記,變量置換會導(dǎo)致變量的值插入一個單詞中。例如:%se
47、t y $x+100 /y的值是10+100,這里x被置換成它的值1010100這時,y的值還不是我們想要的值110,而是10+100,因為TCL解釋器把10+100看成是一個字符串而不是表達式,y要想得到值110,還必須用命令置換,使得TCL會把10+100看成一個表達式并求值。1.2.2 命令置換(command substitution)命令置換是由括起來的TCL命令及其參數(shù),命令置換會導(dǎo)致某一個命令的所有或部分單詞被另一個命令的結(jié)果所代替。例如:%set y expr $x+100110y的值是110,這里當TCL解釋器遇到字符時,它就會把隨后的expr作為一個命令名,從而激活與expr對應(yīng)的C/C+過程,并把expr和變量置換后得到的10+110傳遞給該命令過程進行處理。如果在上例中我們?nèi)サ簦敲碩CL會報錯。因為在正常情況下,TCL解釋器只把命令行中的第一個單詞作為看作命令,其他的單詞都作為普通字符串處理,看作是命令的參數(shù)。 注意,中必須是一個合法的TCL腳本,長度不限。中腳本的值為最后一個命令的返回值,例如
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《摔跤吧!爸爸》觀后感匯編15篇
- 海水淡化工程規(guī)劃設(shè)計方案(僅供參考)
- 中學(xué)時代教案課件設(shè)計規(guī)范
- 廣東省四會中學(xué)、廣信中學(xué)2023-2024學(xué)年高二上學(xué)期第二次月考數(shù)學(xué)含解析
- 重慶海聯(lián)職業(yè)技術(shù)學(xué)院《中國現(xiàn)當代文學(xué)作品》2023-2024學(xué)年第二學(xué)期期末試卷
- 山西工程職業(yè)學(xué)院《制藥分離工程》2023-2024學(xué)年第二學(xué)期期末試卷
- 桂林學(xué)院《新營銷概論》2023-2024學(xué)年第二學(xué)期期末試卷
- 陜西學(xué)前師范學(xué)院《數(shù)字孿生與智能設(shè)計》2023-2024學(xué)年第二學(xué)期期末試卷
- 重慶信息技術(shù)職業(yè)學(xué)院《員工招聘與測評》2023-2024學(xué)年第二學(xué)期期末試卷
- 西安思源學(xué)院《企業(yè)價值創(chuàng)造實戰(zhàn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 門式起重機、架橋機作業(yè)前安全隱患排查表
- 安全閥在線校驗及延期校驗
- GB/T 19670-2023機械安全防止意外啟動
- GB/T 9128.1-2023鋼制管法蘭用金屬環(huán)墊第1部分:PN系列
- 完全病歷模板
- 食材配送服務(wù)人員配置方案
- 幼兒園新生入園報名登記表
- 中國臨床戒煙指南的指導(dǎo)意義
- (完整版)EORTC生命質(zhì)量測定量表QLQ-C30(V3.0)
- 醫(yī)院醫(yī)學(xué)影像科CT-MR室診療指南和操作規(guī)范2022版
- 金稅工程(三期)總體實施方案
評論
0/150
提交評論