Linux启动TCL :
输入tclsh
输入#!/user/bin/tclsh (TCL的安装路径)
Tcl解释器在分析命令时,会把所有的命令参数都当作字符串看待
TCL解释器对一个命令的求值分为了:分析和执行
分析:把命令分解为独立的单词,进行必要的置换动作。
执行:把第一个单词当做命令,查看这个命令是否有定义,有的话激活其对应的内部动作。
set x 10; #将字符串"10" 赋值给x
set y 100 + x; #此时y的值为"100 + 10",因为x是字符串"10"
set a "snow"; #将字符串"snow" 赋值给a
puts $a; #通过$ 引用变量a,打印出a的值:snow
snow
puts a; #直接把a字符打印出来,而非a的值snow
Tcl解释器会认为[]内是独立的解释语句
set a [expr 3 + 4];
puts a
7
expr:求值,当Tcl解释器遇到字符’['时,它就会把随后的expr作为一个命令名,从而激活与expr对应的C/C++过程,并把expr命令中变量置换后得到的’3+4’传递给该命令过程进行处理。Tcl解释器会把[expr 3 + 4]执行的值赋给a
将换行符(\n)、空格、TAB(\t)、[ 、$等在TCL语言中被判定为特殊字符,通过前置1个反斜杠置换成普通字符
set a 1.2
set y 1.3
puts "[expr $x+$y]"
2.5
puts "\[expr $x+$y\]"
[expr 1.2+1.3]; # [ 不再作为置换符,同时tcl也不再识别expr,被直接打印出来
puts "\[expr \$x+\$y\]"
[expr $x+$y]; # [ 不再作为命令置换符,$也不再是变量置换符,被直接打印出来
除了使用反斜杠外,Tcl提供另外两种方法来使得解释器把分隔符和置换符等特殊字符当作普通字符,而不作特殊处理,即是 { } 和 [ ]
{ }:所有{}中的特殊字符,TCL解释器都将作为普通字符处理
puts {\t[expr $x + $y] }
\t[expr $x + $y]
#:表示注释
#[expr $x + $y]
set a 2
puts $a_1
can't read "a_1": no such variable
TCL解释器会将a_1整体识别为变量名,当没有定义该变量时会报错
puts ${a}_1
2_1
将a的值置换出来
TCL支持通过数组的形式存储多个元素
set array_name array_vlaue
set cell_1(ref_name) "bufx2"
set cell_1(full_name) ""top/cell_1"
set cell_1(pins) "A B C"
通过元素名来检索
$数组名(元素名) 取值
puts $cell_1(ref_name)
bufx2
使用array指令获取数组信息
array size cell_1
3
array names cell_1
ref_name pins full_name; #取得数组的元素名
标量的有序集合
set 列表名 {元素1 元素2 元素3 ...}
set ivt_list {ivtx2 ivtx3 ivtx8}
$列表名(元素名) 取值
puts $ivt_list
ivtx2 ivtx3 ivtx8
set list1 {bufx1 bufx2 bufx3}
set list2 {ivtx1 ivtx2 ivtx3}
concat $list1 $list2
set list3 {ivtx4 ivtx5}
bufx1 bufx2 bufx3 ivtx1 ivtx2 ivtx3 ivtx4 ivtx5
llength list1
3
lindex $list1 1
bufx2
例题:如何得到列表list1的最后一个元素
lindex $list1 [expr [llength $list1] - 1]
#在列表后拼接元素
set a {1 2 3}
lappend a 4
puts $a
1 2 3 4
#拼接多个列表
set a {1 2 3}
set b {4 5}
lappend a $b
1 2 3 {4 5}
#获得拼接后列表的元素4
lindex [lappend a $b] 3
{4 5}
lindex [lindex [lappend a $b] 3] 0
4
-real 按照浮点型数值大小排序
-unique 唯一化,删除重复元素
缺省按照ASCII进行排序
set list {c d a f b}
lsort $list
a b c d f
set list2 {-2 3.1 5 0}
lsort -real $list2
-2 0 3.1 5
set list3 {a c c b a d}
lsort -unique $list3
a b c d
例题:如何得到list {0 1.2 -4 3 5}中的最小值
set list {0 1.2 -4 3 5}
lsort -real $list
-4 0 1.2 3 5
lindex [lsort -real $list] 0
-4
a + b
a - b
a * b
a / b
a<=b
a>=b
a == b
a != b
if {判断条件} {
脚本语言
} elseif {判断条件} {
脚本语言
} else {
}
注意脚本语言的{一定要写在上一行,不然TCL解释器会认为if在换行符\n处已经结束,下一行会被识别成新的TCL指令
例题:如何判断列表{0 1 2 3 4}的长度是>3 , =3 or ❤️?
set list {0 1 2 3 4}
if { [expr [llength list] > 3} {
puts "list length >3"
}