TCL基础知识
置换
TCL解释器运用规则把命令分成一个个独立的单词,同时进行必要的置换
TCL置换分为以下三类
变量置换 $
命令置换 []
反斜杠置换 \
用 $ 表示变量置换
TCL解释器会将认为 $后面为变量名,将变量置换成它的值
用[]表示命令置换
[]内是一个独立的TCL语句
用\表示反斜杠置换
换行符、空格、[、 $、等被TCL解释器当作特殊符号对待的字符,加上反斜杠后变成普通字符
用\t表示TAB
用\n表示换行符
""TCL解释器对双引号中$和[]符号会进行变量置换和命令置换
{}而在花括号中,所有特殊字符都将成为普通字符,TCL解释器不会对其作特殊处理
#表示注释
变量
变量就是某个容器的名称,可以储存一个值。变量的名称在程序运行期间保持不变,但是变量的值通常会不断改变。
定义:set 变量名 变量值
取值:$变量名
例题:假设我们想打印变量varible,后面跟一个“_1”,会发生什么呢?
数组
数组:TCL中数组可以储存很多值,通过元素名来进行检索。类似于某件事物(数组名)集中不同属性(元素名),每一种属性有其独立的值
定义:set 数组名(元素名)值
取值:$数组名(元素名)
使用array指令获取数组信息
列表
列表是标量的有序集合
定义set列表名{元素1 元素2 元素3 …}
取值$列表名
TCL中有一系列十分方便的列表操作命名
concat
语法格式:concat列表1 列表2
功能:将列表1 和列表2合并
llength
语法格式:llength列表
功能:返回列表中的元素个数
lindex
语法格式:lindex列表n
功能:返回列表中第n个元素(从0开始计数)
例题:如何得到列表list1{a b c d e f}的最后一个元素?
lappend
语法格式:lappend列表新元素
功能:列表末尾加入新元素
lsort
语法格式:lsort开光列表
功能:将列表按照一定规则排序
开关:缺省时默认按照ASCLL码进行排序
-real 按照浮点数值大小排序
-unique 唯一化,删除重复元素
例题:如何得到列表list1 { 0 1.2 -4 3 5}中的最小值
运算
数学运算
a + b
a - b
a * b
a / b
逻辑运算
a <= b
a >= b
a == b
a != b
expr
语法格式:expr运算表达式
功能:将运算表达式求值
如果想要进行浮点运算,只要将其中任意一个数值,写出浮点形式(有小数点)即可
控制流
if
语法格式:
if{判断条件}{
脚本语句
}elseif{判断条件}{
脚本语句
}else{
脚本语句
}
注意,上例中脚本语句的‘{’一定要写在上一行,因为如果不这样,TCL解释器会认为if命令在换行符处已结束,下一行会被当成新的命令,从而导致错位。
foreach
语法格式:foreach变量 列表 循环主体
功能:从第0个元素开始,每次按顺序取得列表的一个元素,将其赋值给变量,然后执行循环主体一次,直到列表最后一个元素。
break
语法格式:break
功能:结束整个循环过程
continue
语法格式:continue
功能:仅结束本次循环
while
语法格式:while判断语句 循环主体
功能:如果判断语句成立(返回值非0),就运行脚本,直到不满足判断条件停止循环,此时while命令中断并返回 一个空字符串
for
语法格式:for 参数初始化判断语句重新初始化参数循环主体
功能:如果判断语句返回值非0就进入循环,执行循环主体后,在重新初始化参数。然后再次进行判断,知道判断语句返回值为0,循环结束。
过程函数
proc
语法格式:proc函数名 参数列表 函数主体
功能:类似于C语言中的函数。即用户自定义的功能,方便多次调用
全局变量:在所有过程之外定义的变量
局部变量:对于在过程中定义的变量,因为它们只能在过程中被访问,并且当过程退出时会被自动删除。
指令global,可以在过程内部引用全部变量
正则匹配
定义:正则表达式是一种特殊的字符串模式,用来去匹配符号规则的字符串
正则表达式的\w,用来匹配一个字母、数字、下划线
正则表达式的\d,用来匹配一个数字
我们可以用代替重复的量词进行表示。
锚位:用来指示字符串当中的开头和结尾的位置,使我们能够匹配到正确的字符
regexp
语法格式:regexp?switches?exp string?matchVar? ?subMatchVar subMatchVar…?
功能:在字符串中使用正则表达式匹配
switches:
-nocase将字符串中的大写都当成小写看待
exp正则表达式
string用来进行匹配的字符串
matchstring表示用正则表达式匹配的所有字符串
sub1表示正则表达式中的第一个子表达式匹配的字符串
sub2表示正则表达式中的第二个子表达式匹配的字符串
例题:如何匹配字符串“abc456”
例题:如何匹配一个以数字开头并且以数字结尾的字符串?
捕获变量
通过()可以捕获字符串
例如如何将字符串“Snow is 30 years old”中的30捕获出来?
文本处理
open
语法格式:open文件打开方式(打开方式r表示读模式,w表示写模式)
功能:打开文件
gets
语法格式:gets fileld变量名
功能:gets读fileld标识的文件的下一行,并把该行赋给变量,并返回该行的字符数(文件尾返回-1)
close
语法格式:close fileid
功能:关闭文件