文章目录
置换
$:变量置换
[xxx]:命令置换
\:escape转义
例子:
group
“”:置换后group
{}:只group不置换
if
if命令需要注意格式,注意空格;并不能像编译型的语言那样,写的很随意。我们心里需要有一根弦,就是这是一个“命令”。
if {条件} {过程}
注意:
- if和{条件} {过程}可以理解为“命令 参数1 参数2”, 所以命令、参数1和参数2之间需要有空格;
- {条件} {过程}作为参数,需要和命令保持关系,至少要保留一个{和前一个元素在一行。
- 如果整个if语句有换行,出错了,报的还是if那一行;
- {}内部对空格没有特殊要求。
if {条件} {过程} else {else过程}
else和{else过程}也理解为参数,需要空格间隔。
if {条件} {过程} elseif {条件} {过程} else {else过程}
例子:
if {1} {
puts helloif
} elesif {1} {
puts helloelseif
} else {
puts helloelse
}
循环
for
for {循环变量初始化} {循环变量判断} {循环变量更新} {过程}
按照命令、参数的思路,注意空格. {}内部不需要特别注意空格。
例子:
for {set i 0} {$i<3} {incr i} {puts $i}
foreach
foreach list元素 list {过程}
例子:
set mlist {a {a b} {ab} c}
foreach item $mlist {
puts $item
}
注意:
参数之间用空分割,不是用“,”分割。
set mlist {a {a b} {ab} c} √
set mlist {a, {a b}, {ab}, c} ×
while
while {循环变量} {过程}
按照命令、参数的思路,注意空格. {}内部不需要特别注意空格。
例子:
set i 0
while {$i<3} {
puts $i
incr i
}
switch
switch $key {key值1 {过程} key值2 {过程} ... key值n {过程}}
类似case语句。
按照命令、参数的思路,注意空格. {}内部不需要特别注意空格。
例子:
set key a
switch $key {
a {puts "my a"}
b {puts "my b"}
c {puts "my c"}
}
常用命令
set, unset
set 目标 值
TCL数据类型原则上都是字符串。例如:
set a 0
这里的0是字符串,不是数字0
set不指定特定的值,到有些解释器下可以呈现打印的效果。
set a 0
set a
puts $a
unset 目标
expr
expr 数学运算
由于TCL原则上都是字符串,那么要进行数学运算,就需要用到expr命令。
incr
incr 变量
在for循环中操作循环变量常用的指令。
global
块代码中,如果变量前使用global关键字,则变量为全局变量;否则默认为局部变量。
pwd, cd
目录操作。
glob, {*}, eval
和global长得像,实际没啥关系。可以类比ls命令。能匹配*通配符。
glob *.c *.sv
返回值是一个列表。返回值直接做命令的参数可能会有问题。常和{*} (参数展开语法)或者"eval"一起用来解决这个问题,例如:
file delete \{ *} [glob *.tmp``]
eval file delete [glob * tmp]
format, scan
format:字符串格式
scan:字符串格式扫描
set msg [format "%s is %d years old" $name $aget]
scan "%s is %d years old" msg
regexp
string是否全部或者部分匹配pattern
regexp pattern string
exec
TCL解释器运行其它进程,如:
# TCL调用sh的data命令
exec data
文件操作例子:open, gets, puts, close, flush
proc tgrep {pattern filename} {
set f [open $filename]
while {[gets $f line]} {
if {[regexp $pattern $line]} {
puts stdout $line
}
}
close $f
}
参考
- 路科验证视频
- TCL/TK入门经典
本文介绍了TCL编程中的基本概念,包括变量置换、条件控制(if、switch)、循环结构(for、foreach、while)、常用命令(set、unset、expr、incr等)、文件操作函数以及相关示例。
82

被折叠的 条评论
为什么被折叠?



