tcl笔记

发布时间 2023-05-23 17:20:34作者: halu126

交互模式启动tcl

命令号里直接输入tclsh

分隔符

单词分隔符

空白字符

命令分隔符

分号(;) 或者 回车(\n)

变量

变量赋值

变量赋值

第一个参数名字为varname的变量

set varname value

动态变量

% set a x
x
% set $a 5
5
% puts $a
x
% puts $x
5
% puts $$a
$x
% eval puts $$a
5

列表

一组用空白字符分割的元数,可以用双引号、大括号或者转移空白字符分割

% set tmp_list "1 2 3 4 5"
1 2 3 4 5
% set tmp_index 4
4
% puts [lindex $tmp_list [expr $tmp_index -1 ]]
4

关联数组

% set person(name) Jack
Jack
% set person(age) 29
29
% set person(position) enginerr
enginerr
% set person(123) xyz
xyz
% puts [array names person]
position age name 123
% puts $person(name)
Jack

字典

% dict set mydict a {b c}
a {b c}
% dict get $mydict a b
c

文件句柄

set myfile [open "filename" r]

布尔值

布尔值,可以表示为1,yes,YES,TURE 或 true 为真值和0,no , NO, FALSE或 false 为假值。

变量使用

$varname

置换

  • 变量置换 $

  • 命令置换 []

  • 转移置换 \

括号和引号

大括号(Braces),在大括号内的信息不能被替换,相当于一个隔离墙,如果需要替换可以使用引号(double quote)。

方括号(Square brackets),创建嵌套的命令,既然是嵌套就是在内部,按照替换原则,越内部的先被替换掉。

双引号(double quote),将一串字符并成一个单一的 word,就是让 Tcl 解释器明白即使引号内部有很多空格,也是作为一个 word 来处理。 如果中间没有空白字符可以省略双引号

小括号(Round brackets),当这个出现在变量中,做为数组 index 的 container,比如 set mine(name) Steve,name 就是数组的一个 index。

字符串

字符串处理

正则

控制流

if

if {逻辑运算 / 关系运算 等布尔表达式} {  #虽然要进行表达式运算,这里不用使用 expr 命令

} elseif {布尔表达式} {
# elseif 可选
} else {
 # else 可选
}

foreach/for/while

while

#!/usr/bin/tclsh

set a 10

#while loop execution
while { $a < 20 } {
  puts "value of a: $a"
  incr a
}

for

#!/usr/bin/tclsh

# for loop execution
for { set a 10} {$a < 20} {incr a} {
  puts "value of a: $a"
}

foreach

#!/usr/bin/tclsh

set personA(Name) "Dave"
set personA(Age) 14
foreach index [array names personA] {
  puts "personA($index): $personA($index)"
}

 

break

同其他语言

continue

同其他语言

switch

#!/usr/bin/tclsh

set grade B;

switch $grade {
  A {
    puts "Well done!"
  }
  B {
    puts "Excellent!"
  }

  C {
    puts "You passed!"
  }
  F {
    puts "Better try again"
  }
  default {
    puts "Invalid grade"
  }
}
puts "Your grade is  $grade"

过程函数

定义过程

作用域

文本处理

set myfile [open "filename" r]

其他

改变运算符号的优先级

% set a 20
20
% set b 10
10
% set c 15
15
% set d 5
5
% set e [expr[expr $a+$b] * $c /$d]
invalid command name "expr30"
% set e [expr [expr $a+$b] * $c /$d]
90
% set e [expr ($a + $b) * $c /$d]
90
% set f [expr !($a && $b)]
0

 

 

 

https://blog.csdn.net/qq_42135020/article/details/127971074

https://zhuanlan.zhihu.com/p/39979318

https://www.yiibai.com/tcl/tcl_arrays.html

常用命令

puts

set 变量赋值

expr 表达式运算 :数学表达式运算、逻辑运算、关系运算、三元运算

incr 数字加一 类似其他余元的 ++

array names arrayName 数组key列表

array size arrayName 数组大小

string tolower $stringName

format 类似c种的printf

scan [scan "被扫描的字符串" {%[模式]} m] #将被扫描字符串中符合模式的部分 赋值给变量m