tcl常用命令

发布时间 2023-09-15 20:21:32作者: yoy116

tcl有效命令行以命令+字符串形成;命令之间用换行符或分号隔开

置换($、[]、\)和引用("",{})的差别和联系

置换:变量置换、命令置换和反斜杠置换
变量置换:$, 置换的是变量的值。变量的名字字母、数字和下划线
命令置换:由[]括起来的TCL命令及其参数。TCL遇到 "[]" 时, 会将其内部识别为命令

反斜杠置换:在单词符号中插入诸如换行符、空格、【、$等被TCL等解释其当作特殊符号对待的字符。

\n、\t、\ddd、\xhh、\b

"" :对双引号中的各种分隔符不做处理,对换行符,$和 []置换符会照常处理
{} :

变量

数组:数字只能和数组元素一起声明。如%set day(monday) 1

list:表示集合。

{}、{a b c {}}。
语法:list ? value ...?
函数:concat list ?list...?
lindex list index
llength list
linsert list index value?value...?
lappend varname value ?value...?

相关命令

unset:删除变量,可有任意多个参数。使用:%unset a b day(monday)
append:把文本加到一个变量后面
incr:把一个变量值加上一个整数

eval、expr、source、exec的差别

expr: 语法:expr arg ? arg ...?
两个问号之间的参数表示可省。
eval:语法:eval arg?arg...?
接收一个或多个参数,把所有的参数组合在一起成为一个脚本,然后对这个脚本进行求值。

proc

TCL中的过程类似于C中的函数;

proc add {a b} {expr $x + $y}
proc 过程名 参数列表 过程体

可以用return命令返回需要的值;如果过程没有使用return命令,过程的返回值就是过程中最后一个命令的执行结果

三种参数形式:无参数;带有缺省值的参数;可变个数的参数(最后一个参数是args,表示这个过程支持可变个数的参数)

#无参数
proc abs {} {expr 3+5}
#带缺省值的参数
proc add {var1 {var2 10}} {return [expr $var1+$var2]}
#可变个数的参数
proc avg {args} {
set sum 0
foreach arg $args{set sum [expr $sum+$arg]}
set avg [expr $sum/[llength $args]]
return $avg
}

在所有过程之外定义的变量称为全局变量,在过程内部定义的变量称为局部变量,在过程内部引用一个全局变量的值,使用global命令

字符串操作

因为TCL把所有的输入都当作字符串看待,所以TCL提供了较强的字符串操作功能
format: format formatsting ?value value..?

set name Jone
set age 20
set msg [format "%s is %d years old" $name $age]

scan: scan string format varname ?varname...?

scan "some 26 34" "some %d %d" a b
set a
set b

{ * }配合glob等返回list后的操作