TCL使用

发布时间 2023-09-10 02:49:55作者: 就很胖

1、TCL解释器运用规则把命令分成一个个独立的单词,同时进行必要的置换。

TCL置换分为以下三类。
变量置换 $
命令置换 []
反斜杠置换
而{} 则会将花括号内部的所有字符都解释称普通字符,不会进行置换
# 表示注释

2、变量、数组、列表

变量

定义变量: set 变量名 变量值
使用变量: $变量名

#普通情况下
set a "snow"
puts $a
#若向实现输出 snow_1,怎样操作?
#此时需要利用{}限定$的解释范围
puts ${a}_1 
#若利用puts $a_1 则会让$解释a_1,但是$a_1没有定义,所以会报错

数组

数组:TCL中数组可以存储很多值,通过元素名来进行检索。类似于某件事物(数组名)几种不同属性(元素名),每一种属性有其独立的值。
定义数组: set 数组名 (元素名) 值
数组取值:puts $数组名(元素名)
获取数组元素个数: array size 数组名
获取数组元素名: array names 数组名

(System32) 11 % set cell_1(ref_name) "bufferx2"
bufferx2
(System32) 12 % set cell_1(full_name) "top/cell_1"
top/cell_1
(System32) 13 % set cell_1(pins) "A B C"
A B C
(System32) 14 % puts $cell_1(ref_name)
bufferx2
(System32) 20 % array size cell_1
3
(System32) 21 % array names cell_1
ref_name pins full_name

列表

列表式标量的有序集合
定义列表: set 列表名 {元素1 元素2 元素3 ......}
列表取值: $列表名

(System32) 31 % set ivt_list {ivtx1 ivtx2 ivtx3}
ivtx1 ivtx2 ivtx3
(System32) 32 % puts $ivt_list
ivtx1 ivtx2 ivtx3
(System32) 33 % 

列表合并,注意,合并之后并未自动生成新列表,若想再次引用,可以利用set 创建新列表,如下的my_list

(System32) 34 % set list1 {bufx1 bufx2 bufx3}
bufx1 bufx2 bufx3
(System32) 35 % set list2 {bufx4 bufx5 bufx6}
bufx4 bufx5 bufx6
(System32) 36 % set list3 {bufx7 bufx8 bufx9}
bufx7 bufx8 bufx9
(System32) 37 % concat $list1 $list2 $list3
bufx1 bufx2 bufx3 bufx4 bufx5 bufx6 bufx7 bufx8 bufx9
#列表合并后利用set生成新列表
(System32) 42 % set my_list [concat $list1 $list2 $list3]
bufx1 bufx2 bufx3 bufx4 bufx5 bufx6 bufx7 bufx8 bufx9
(System32) 43 % puts $my_list
bufx1 bufx2 bufx3 bufx4 bufx5 bufx6 bufx7 bufx8 bufx9
#返回列表中元素个数
(System32) 44 % llength $list1
3
#返回列表中的第2个元素(从0开始计数)
(System32) 45 % set list1 {bufx1 bufx2 bufx3}
bufx1 bufx2 bufx3
(System32) 46 % lindex $list1 2
bufx3
#返回列表中的最后一个元素(一种方法是可以通过查询列表最后一个元素的索引,然后通过lindex找到最后一个元素)
(System32) 51 % lindex $list1 [expr [llength $list1]-1]
f
#在列表尾加入新元素(只能增加一个元素)
(System32) 52 % set a {1 2 3}
1 2 3
(System32) 53 % lappend a 4
1 2 3 4
(System32) 54 % puts $a
1 2 3 4
#直接在数组末尾增加新数组,后一个数组会被视为一个元素,此时类似于二维列表,可以通过先引用到列表b位置,然后再找到4
(System32) 60 % set a {1 2 3}
1 2 3
(System32) 61 % set b {4 5}
4 5
(System32) 62 % lappend a $b
1 2 3 {4 5}
#如何引用4?
(System32) 64 % lindex [lindex [lappend a $b] 3] 0
4
(System32) 65 % 

lsort列表指令

使用: lsort 开关 列表
功能: lsort作用在于将列表按照一定规则排序
开关: 默认按照ASCII码进行排序
-real 按照浮点数大小排序
-unique 删除重复元素

(System32) 65 % set list1 {c d a f b}
c d a f b
(System32) 66 % lsort $list1
a b c d f
(System32) 67 % set list2 {-2  3.1 5 0}
-2  3.1 5 0
(System32) 68 % lsort -real $list2
-2 0 3.1 5
(System32) 69 % set list3 {1 1 2 2 3 3}
1 1 2 2 3 3
(System32) 70 % lsort -unique $list3
1 2 3
(System32) 71 % 

运算

语法格式: expr 运算表达式
功能: 将运算表达式求值
tips: 如果想要进行浮点运算,需要将其中任意一个数值,写成浮点形式(有小数点),否则会出现5/2=2的情况(即可以用5.0/2=2.5得到正确结果)
数值运算
a+b
a-b
a*b
a/b

(System32) 71 % expr 3+4
7
(System32) 72 % 

逻辑运算
a<=b
a>=b
a==b
a!=b