日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TCL基础篇---基本语法(持续更新)

發布時間:2025/4/5 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TCL基础篇---基本语法(持续更新) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • TCL基本入門
  • append的用法
  • incr的用法
  • 常見列表
    • llength:返回一個列表的元素個數
    • lindex :返回索引值對應的列表元素
    • lrange:返回指定區間的列表元素
    • lassign:將列表元素賦值給變量
    • lappend 在原列表后面添加元素
    • lreplace列表元素替換
    • lset 列表元素設置
    • linsert 在指定索引值的列表中插入新值
    • lsort:對列表內的元素排序
    • lreverse:反向列表
  • TCL控制流
    • if命令
    • 循環命令:while、for、foreach
    • eval命令
  • source -e -v
  • 提示
  • 參考文章:

從業IC的人員都知道tcl語言對于測試人員或者說設計人員都是非常重要的一門語言,為了建立更好的自動化測試環境,我們可能不僅僅是只需要了解那份執行的scripts,也可能需要知道環境里面的scripts,而里面必然涉及到一些選擇語句等等,如果能把tcl的知識掌握好,然后再去做幾個測試練習,最后,自己動手寫幾個腳本,再帶著這樣的思想去揣摩工作中的環境,想必能力上會有更好地提升。
tcl系列博文,將為這些能力打下一個基礎前提。分為三篇: 基礎篇、 練習篇、 實際項目篇。

TCL基本入門

TCL解釋器對一個命令的求值分為了:分析和執行
分析:把命令分解為獨立的單詞,進行必要的置換動作。
執行:把第一個單詞當做命令,查看這個命令是否有定義,有的話激活其對應的內部動作。

置換分了了三種:
1、變量置換 $
2、命令置換 [ ]
3、反斜杠置換

解釋:

%set x 10 %set y [expr $x + 100]

y的值是110,當TCL解釋器遇到字符 【 ,它就會把隨后expr作為一個命令名,從而激活expr對應的動作,如果我們去掉【 】,TCL會報錯,正常情況下只把命令行中的第一個單詞作為命令,注意【】中必須是一個合法的TCL腳本,長度不限?!尽恐械哪_本的值為最后一個命令的返回值。

%set y [expr $x+100;set b 300]//y 的值為300

反斜杠置換中,在單詞符號中插入換行符、空格、【、$等被TCL解釋器當做特殊符號對待的字符。

雙引號和花括號:
TCL解釋器對雙引號中的各種分隔符將不做處理,但是對換行符、以及$ 和【】兩種置換符會照常處理。

%set x 100 100 %set y "$x ddd" 100 ddd

在花括號中,所有特殊字符都將被成為普通字符,失去特殊意義。

%set y {/n$x [expr 10 +100]} /n$x [expr 10 +100]

數組

數組不需要聲明,直接賦值即可,也不必按照順序來:
set i(1) 123 ; set i(16) hi
當然也支持任意維數的數組:
set i(1,2,3) hi
引用的時候直接$i(1,2,3)即可

set與unset
一個是設置變量,一個刪除變量。

append的用法

append的目的是將新的單詞追加到原來舊的變量后面,而不是像set那樣去替換原來這個舊的變量。

1% set x hello hello % set y world world % set x "$x$y" helloworld 2% set x hello hello % set y world world % append x $y helloworld

所以我們常可以看到dc里面設置search_path的時候,我們會用append,而不是用set去替換。

incr的用法

incr后面跟兩個數,第一個參數為變量名,第二個參數為整數(默認為1),incr的目的就是將這個整數的值加到這個變量名的值上面,然后將結果存儲到這個變量名中。
相當于a=a+number,值得一提的是不管是a還是number都必須要是整數,不可以為小數。

1% set a 16 16 % incr a 2 18 % incr a -5 13 % incr a 14 % incr a 011 23 % incr a 0x11 402% incr x 5 5 % incr y 13% incr x 2.3 expected integer but got "2.3" % set x 2.3 2.3 % incr x 2 expected integer but got "2.3" 解析:incr 的第一個參數必須是整數變量,第二個參數必須是整數。

常見列表

列表作為TCL中的一種重要的數據結構:
1、使用{ }創建

%set a {Hello FPGA!} Hello FPGA!

2、通過list進行創建
因為list本身就是一個TCL,因此與set一起使用的時候就要用到命令置換符【】

%set b [list Hello FPGA!] Hello FPGA!

3、通過contact命令創建列表
contact的參數可以使任意多個列表,從而實現列表的拼接

set c [contact $a $b] Hello FPGA! Hello FPGA! %set d [contact {} {b c} {d}] b c d

4、通過lrepeat命令創建列表
lrepeat命令接收兩個參數,第一個參數是重復次數,第二個參數是重復值。

%set m [lrepeat 4 "**"] ** ** ** **

5、創建空的列表
空的列表不包含任何值,通常用于列表的初始化??梢酝ㄟ^{},也可以通過list創建空列表。

%set p {} llength $p 0 set q [list] llength $q 0

創建列表的方法有很多種,但list是最常見的。
另外上面介紹的列表除了創建一個新的列表,還有基于列表為元素的,這里我將其分開。
基于單詞元素和列表元素的有: { } 、list、lrepeat
其余都是基于列表元素

list與contact的區別:
concat是去掉了一層列表結構后,再組合所有的元素

llength:返回一個列表的元素個數

llength list

lindex :返回索引值對應的列表元素

元素的下標從0開始算起。如果沒有index參數就返回整個列表,如果index對應的元素還是一個列表就返回對應子列表中的元素。

lrange:返回指定區間的列表元素

lrange list first last

返回列表list一個區間的元素,區間由first和last指定

lassign:將列表元素賦值給變量

lappend 在原列表后面添加元素

lappend命令接收一個變量名(列表名),將元素添加到原列表后面

lreplace列表元素替換

lset 列表元素設置

lset和lappend一樣接收一個變量名作為參數,也會修改變量的值,將列表中的指定索引元素修改為指定的新值,如果不指定索引項就把整個列表換成新值。

linsert 在指定索引值的列表中插入新值

在索引位index的前面插入元素,產生一個新的列表

lsort:對列表內的元素排序

lsort ?options?list


1)按照ASCII碼的順序排序,是默認狀態。

2)按照字典順序排序。

3)按照浮點數排序,要求列表里面的元素都能夠正確的轉化為浮點數。

4)按照整數排序,要求列表里面的元素都能夠正確轉化為整數.


1)-increasing 按照升序排列

2)-decreasing 按照降序排列

3)-indices 返回排序后的元素在原列表中的索引

4)-nocase 忽略大小寫

lreverse:反向列表

返回一個列表,新的列表為原列表的反序形式。

TCL控制流

if命令


注意, { 一定要寫在上一行,因為如果不這樣,TCL解釋器會認為if命令在換行符處已結束,下一行會被當成新的命令,從而導致錯誤的結果。書寫中還要注意一個問題是if和{之間應該還有一個空格,否則TCL解釋器會把 “if{” 作為一個整體當做一個命令名,從而導致錯誤。

循環命令:while、for、foreach

while

for

foreach
主要功能是遍歷列表中的元素。
主要用法有三種形式:
1、

% foreach var {a b c d e f} { puts $var } a b c d e f

2、
可以對列表進行多個元素一起賦值,這時varname是一個n個元素列表結構,每次遍歷list列表中的n個元素賦值給以varname列表元素為名稱的變量。

% foreach {var1 var2 var3} {a b c d e f} { puts "$var1 $var2 $var3" } a b c d e f

3、
遍歷多個列表中的元素,這里舉例以varname為單個元素為例:

% foreach var1 {a b c} var2 {d e f} { puts "$var1 $var2" } a d b e c f 如果元素不足那么會以空來補充: % foreach var1 {a b c} var2 {d e} { puts "$var1 $var2" } a d b e c

可以利用這個技巧給變量賦值,比如把一個列表中的前3個元素分別賦值給

var1、var2和var3:% foreach {var1 var2 var3} {a b c d e f} {break;}% puts "$var1 $var2 $var3"a b c

\ 仔細體會一下break的妙用吧。

eval命令

eval是調用一個TCL腳本

eval arg ?arg...?

如果是一個參數,那么相當于把這個參數當做命令來執行
如果有多個參數,eval命令會把多個參數以concat命令風格連接起來然后再執行命令。

source -e -v

-e代表echo
-v代表verbose
好文:
https://my.oschina.net/u/4579346/blog/4426952

-e代表echo執行了哪些cmd
-v代表每一行cmd執行的結果。

https://blog.csdn.net/icxiaoge/article/details/102770805

提示

在資料中你也許經常會碰到 ?的書寫方法,影響你的閱讀體驗

例如下圖:

參考文章:

https://blog.csdn.net/long_fly/article/details/78897158?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-6&spm=1001.2101.3001.4242

http://m.elecfans.com/article/817355.html

https://blog.csdn.net/dongyanxia1000/article/details/50682376

https://blog.csdn.net/dulixin/article/details/2410015

https://blog.csdn.net/dulixin/article/details/2410030

https://my.oschina.net/u/4579346/blog/4426952

https://blog.csdn.net/icxiaoge/article/details/102770805

總結

以上是生活随笔為你收集整理的TCL基础篇---基本语法(持续更新)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。