Grouping arguments with double-quotes 用双引号来集群参数用双引号来集群参数的目的在于使用有空白的参数。
例如:
set a "this string contains whitespace"
如够一个参数一双引号来开始,该参数会一直到下一个双引号才结束。其中可以有换行符和分号。
子替换是在正式运行该调命令之前由分析器作的
Variable substitution with $ 用美元符进行变量替换说白了就是引用该变量。
如:
set a hello
set b $a // b = "hello" 实际上传给set命令的参数
//是b,"hello"
set c a // b = "a"
Command substitution with brackets 命令子替换(用方括号)
例如:
set a [set b "hello"]
实现执行 set b "hello" 并用其结果来替换源命令
中的方括号部分,产生一条新命令
set a "hello" //"hello" 为 set b "hello" 的返
//回值
最终的结果是b="hello" a="hello"
tclsh>array startsearch a
s-1-a
tclsh>array nextelement a s-1-a
1111
tclsh>array nextelement a s-1-a
2222
tclsh>array anymore a s-1-a
1
tclsh?array nextelement a s-1-a
3333
tclsh>array donesearch a s-1-a
注意可以同时并发多个遍历。
break
跳出最近的循环。
case string in patList body ...
case string patList body ...
case string in {patList body ...}
case string {patList body ...}
分支跳转。
例如:
case abc in {a b} {puts 1} default {puts 2} a* {puts 3}
return 3.
case a in {
{a b} {format 1}
default {format 2}
a* {format 3}
}
returns 1.
info subcommand
info subcommand arg ...
取得当前的Tcl解释器的状态信息。
info args procname
返回由procname指定的命令(你自己创建的)的参数列表。
如:
proc ff { a b c } {puts haha}
info args ff
//return "a b c"
info body procname
返回由procname指定的命令(你自己创建的)的函数体。
如:
proc ff { a b c } {puts haha}
info body ff
//return "puts haha"
info cmdcount
返回当前的解释器已经执行的命令的个数。
info commands
info commands pattern
如果不给出模式,返回所有的命令的列表,内建和自建的。
模式是用C Shell匹配风格写成的。
info complete command
检查名是否完全,有无错误。
info default procname arg varname
procname的参数arg,是否有缺省值。
info exists varName
判断是否存在该变量。
info globals
info globals pattern
返回全局变量的列表,模式同样是用C Shell风格写成的。
info hostname
返回主机名。
info level
info level number
如果不给参数number则返回当前的在栈中的绝对位置,参
见uplevel中的描述。如加了参数number,则返回一个列表包
含了在该level上的命令名和参数。
info library
返回标准的Tcl脚本的可的路径。实际上是存在变量
tcl_library中。
info locals
info locals pattern
返回locale列表。
info procs
info procs pattern
返回所有的过程的列表。
info script
返回最里面的脚本(用 source 来执行)的文件名。
info tclversion
返回Tcl的版本号。
info vars
info vars pattern
返回当前可见的变量名的列表。
下面是一些用于列表的命令,范围可以是end。
join list
join list joinString
将列表的内容连成一个字符串。
lappend varName value ...
将value加入列表varName中。
lindex list index
将list视为一个列表,返回其中第index个。列表中的第一个
元素下标是0。
lindex "000 111 222" 1
111
linsert list index element ...
在列表中的index前插入element。
list arg ...
将所有的参数发在一起产生一个列表。
list friday [exec ls] [exec cat /etc/passwd]
llength list
返回列表中元素的个数。
set l [list sdfj sdfjhsdf sdkfj]
llength $l
//return 3
lrange list first last
返回列表中从frist到last之间的所有元素。
set l [list 000 111 222 333 444 555]
lrange $l 3 end
//return 333 444 555
lreplace list first last
lreplace list first last element ...
替换列表中的从first到last的元素,用element。
set l [list 000 111 222 333 444 555]
lreplace $l 1 2 dklfj sdfsdf dsfjh jdsf
000 dklfj sdfsdf dsfjh jdsf 333 444 555
open fileName
open fileName access
打开文件,返回一个文件描述符。
access
r w a r+ w+ a+
定义与C中相同。如文件名的第一个字符为|表示一管道的形式
来打开。
set f [open |more w]
set f [open /etc/pass r]
uplevel command ...
将起参数连接起来(象是在concat中)。最后在由level所指
定的上下文中来执行。如果level是一个整数,给出了在栈中的距
离(是跳到其它的命令环境中来执行)。
缺省为1(即上一层)。
如:
#!/usr/bin/tcl
proc ff {} {
set a "ff" //设置了局部的a
-------------------------
}
set a "global"
ff
puts $a
//return "global"
再看下一个:
#!/usr/bin/tcl
proc ff {} {
uplevel set a "ff" //改变上一级栈中的a
-------------------------------------
}
set a global
ff
puts $a
//return "ff"
如果level是以#开头后接一个整数,则level指出了在栈中的
绝对位置。如#0表示了顶层(top-level)。
a b c 分别为三个命令,下面是它们之间的调用关系,
top-level -> a -> b -> c -> uplevel level
绝对位置: 0 1 2 3
当level为 1 或 #2 都是在 b 的环境中来执行。
3 或 #0 都是在 top-level 的环境中来执行。
upvar ?level? otherVar myVar ?otherVar myVar ...?
在不同的栈中为变量建立连接。这里的level与uplevel中
的level是同样风格的。
例如:
#!/usr/bin/tcl
proc ff {name } {
upvar $name x
set x "ff"
}
set a "global"
ff a
puts $a
//return "ff"
while test body
举个例子吧:
set x 0
while {$x<10} {
puts "x is $x"
incr x
}