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