赞
踩
set a 1
set b 2
或set a 1; set b 2
% set x 10 //定义变量x并把其值赋为10
10
% set y x+100 //y的值是x+100,而不是期望的110
x+100
% set y $x+100 //y的值是10+100,x被置换成其值10
% set y [expr $x+100]
110
% set msg multiple \ space //msg的值为multiple space
% set a \x48 //对应\xhh
H //十六进制的48是72,对应字符H
% set y "$x ddd"
100 ddd
注意:①尽量在单独一行进行注释;②不要在if/for循环内进行注释。
% set a 2 % set a.1 4 % set b $a.1
2 4 2.1 //初衷是4
% set b ${a.1}
4
% set a {kdfj kjdf} % set a
kdfj kjdf kdfj kjdf
% set day(monday) 1 //名为day的数组,在其中生成一个名为monday的数组元素,并把值置为1
% unset a b day(monday)
% set txt hello % append txt "!How are you"
hello hello!How are you
% set b 2; incr b 3 //结果为5
% set x 2 % expr 2*sin($x<3)
2 1.68294196962
expr arg ?arg ...?
两个?之间的参数表示可省(后续对可省参数都使用这种表达形式)。list ? value value ...?
生成一个list,其元素就是所有的value。% list 1 2 {3 4} //1 2 {3 4}
concat list ?list...?
整合两个list。% concat {1 2 3}{4 5 6} //{1 2 3 4 5 6}
lindex list index
返回list的第index个元素。% lindex {1 2 {3 4}} 2 //3 4
llength list
返回list的元素个数**。% llength {1 2 {3 4}} //3
linsert list index value ?value...?
list中插入元素。% linsert {1 2 5 6} 1 7 8 //1 7 8 2 5 6
lappend varname value ?value ...?
把每个value的值作为一个元素附加到变量varname后面。% lappend a 1 2 3 //1 2 3
if test1 body1 ?else bodyn?
if {$x>0}{
...
}elseif{$x==1}{
...}elseif{$x==2}{
...}else{
...}
while test body
参数test是一个表达式,body是一个脚本,如果表达式的值非0则运行脚本直到表达式为0才停止循环,此时while命令中断并返回一个空字符串。此处是一个脚本set b " "
set i [expr [llength $a]-1]
while {$i>=0}{
lappend b [lindex $a $i]
incr i -1
} //变量a是一个链表,脚本把a的值复制到b
for init test reinit body
参数init是一个初始化脚本,test是用来决定循环什么时候中断的表达式,reinit是一个重新初始化的脚本,body是一个代表循环体的脚本。set b " "
for {set i [expr [llength $a]-1]} {$i>=0} {incr i -1} {lappend b [lindex $a $i]}
foreach varname list body
参数varname是一个变量,list是一个表(有序集合),body是循环体。每次取得链表的一个元素,都会执行循环体一次。set b " "
foreach i $a{
set b [linsert $b 0 $i]
} //同上两例
switch ?options ? string {pattern body ?pattern body ...?}
% switch $x { //一旦switch命令找到一个模式匹配就执行相应的脚本
b {incr t1} //并返回脚本的值,作为switch命令的返回值
c {incr t2}}
% source e:/tcl&c/hello.tcl
eval arg ?arg ...?
% eval set a 2;set b 4
% proc add {x y} {expr $x+$y}
% add 1 2 //3
% set a 4
4
% proc sample {x} {
global a
incr a
return [expr $a+$x]}
% sample 3
8
% set a
5
format formatstring ?value value...?
% set name John //John
% set age 20 //20
% set msg [format "%s is %d years old" $name $age] //John is 20 years old
scan string format varName ?varName ...?
% scan "some 26 34" "some %d %d" a b
% set a //26
% set b //34
regexp ?switchs? ?--? Exp string ?matchVar? \ ?subMatchVar subMatchVar...?
文件的打开方式和C语言类似,有以下方式:
r 只读方式打开(默认方式),文件必须已存在。
r+ 读写方式打开,文件必须已存在。
w 只写方式打开文件,若文件存在则清空文件内容,否则创建新的空文件。
w+ 读写方式打开文件,若文件存在则清空文件内容,否则创建新的空文件。
a 只写方式打开打开文件,文件必须存在,并把指针指向文件尾。
a+ 读写方式打开文件,并把指针指向文件尾。若文件不存在,创建新的空文件。
======================================================================================
Open命令返回一个字符串用于标识打开的文件。当调用别的命令对打开的文件进行操作时,就可以使用这个文件标识符。TCL有三个特定的文件标识:stdin、stdout和stderr,分别对应标准输入、标准输出和错误通道,任何时候都可以使用它们。
gets field ?varname?
读field标识的文件的下一行,忽略换行符。如果命令中有varname就把该行赋给它,并返回该行的字符数(文件尾返回-1),如果没有varname参数,返回文件的下一行作为命令结果(如果到了文件尾,就返回空字符串)。
puts ?-nonewline? ?field? string puts
命令把string写到field中,如果没有nonewline开关的话,添加换行符。field默认是stdout。命令返回值为空字符串。
flush field把缓冲区内容写到field标识的文件中,命令返回值为空字符串。
flush命令迫使缓冲区数据写到文件中。flush知道数据被写完才返回。当文件关闭时缓冲区数据会自动flush。
proc tgrep {pattern filename}{
set f [open $filename r]
while{[gets $f line]}{
if{[regexp $pattern $line]}{
puts stdout $line
}
}
close $f
}//TCL文件I/O的基本特点示例
glob ? switches ? pattern ? pattern ...?
% glob *.c *.h
main.c hash.c hash.h
file delete *.tmp // 不生效 不执行通配符展开
glob
命令返回文件列表,再使用参数展开语法{*}把列表元素作为独立参数提供给指令:file delete {*}[glob *.tmp]
eval
:eval file delete [glob *.tmp]
file有许多选项的常用命令,可用来进行文件操作也可以检索文件信息:
file atime name
返回一个十进制的字符串,表示文件name最后被访问的时间。时间是以秒为单位从1970年1月1日12:00AM开始计算。如果文件name不存在或查询不到访问时间就返回错误。例如:% file atime license.txt 975945600
file copy ?-force? ?--? source target
——这个命令把source中指明的文件或目录递归的拷贝到目的地址targetDir,只有当存在-force
选项时,已经存在的文件才会被覆盖。试图覆盖一个非空的目录或以一个文件覆盖一个目录或以一个目录覆盖一个文件都会导致错误。file mkdir dir ?dir ...?
——创建dir中指明的目录。file owned name
——如果name被当前用户拥有,返回1,否则返回0。file executable name
——如果name对当前用户是可以执行的,返回1,否则返回0。Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。