TCL编程语言命令

1、puts:输出命令,将字符串输出到标准输出channelld

% set a 10 ;#赋值变量a=10
10
% puts a   ;#输出字符串a
a
% puts $a  ;#输出字符串a所引用的变量
10

2、set or unset:变量定义和赋值命令

set:使用时不必指用变量值类型,因为变量值类型仅为一种(字符串),赋值时,会为变量开辟内存空间存储变量值。

unset:取消变量定义,并且释放变量所占用的内存空间。

% set a 10 ;#变量a赋值10
10
% unset a  ;#释放变量
% puts $a  ;#输出字符串a所引用的变量 
can't read "a": no such variable  ;#由于a赋值的变量已经释放掉,所以没有有效值
%set a hello
hello
%set a "hello world" ;#需要注意的是当变量多于一个词时,应该加“”,使其认为为一个整体的字符串。
hello world

3、$:替换,实现引用替换、用以引用参数值。

% set a hello  
hello
% set b hi
hi
% set c $$b  ;#$只能进行一次替换,不支持嵌套
$hi
% set d $c
$hi

4、[ ]:完成命令替换。用“[ ]”将一条命令括起来,命令执行完成后,返回结果。

% set b [set a 5]  ;#set a 5命令输出赋值给b  
5
% set c [expr 5*10] ;#expr 5 *10的计算结果赋值给C
50

5、“ ”和{ }:双引号和大括号将多个单词组织成一个参数,也是一种替换操作。一般原则:“ ”内的替换正常进行。{ }内的替换可能被阻止。{ }会阻止内部的嵌套替换。

% set a hello
hello
% set a hello world  ;#没有使用“”或{}导致不符合Set命令
wrong # args: should be "set varName ?newValue?"
% set a {hello world}
hello world
% set a "hello world" ;#“”和{}将多个单词组织成一个参数
hello world

% puts stdout "The length of\"$a\" is [string length $a]" ;#""内的嵌套正常进行
The length of"hello world" is 11
% puts stdout {The length of"\$a"\ is [string length $a]} ;#{}内的嵌套被阻止
The length of"\$a"\ is [string length $a]

6、\:作用时引用特殊字符、续行

% set x 100
100
% set y "$x"  ;#引用变量a的值赋给y
100
% set y "\$x"  ;#加入\代表$x为特殊符号
$x
% puts "he\nllo" ;# \n换行符
he
llo
% set b [puts \   ;#适用于一行命令写不下,换行继续写
$y]
$x

7、数学和逻辑运算符

运算符说明
-  +  ~ !一元减(取负)、一元加(取正)、比特反、逻辑非
* / %乘、除、取余(二元操作符)
+ -

加、减(二元操作符)

<< >>左移、右移(二元操作符)
< <= > >=布尔小于、小于或等于、大于、大于或等于
==  !=布尔等、不等
&比特与
^比特异或
|比特或
&&逻辑与
||逻辑或
x ? y:z三重操作符:根据x的值在y和z两个结果中进行选择。x为true(=1)选择y,反之选择z。

8、数学函数

函数名说明
abs(arg)取绝对值
acos(arg)反余弦
asin(arg)反正弦
atan(arg)反正切
atan2比值取反正切
ceil(arg)返回不小于arg值的整数值
cos(arg)余弦
cosh(arg)双曲余弦
double(arg)转换双精度
exp(arg)exp运算(e的幂)
floor(arg)
fmod取余(结果为浮点型)
hypot(x,y)根据直角三角形两直边长度计算出斜边长度
int(arg)取整
log(arg)自然对数
log10(arg)以十为底的对数
pow幂运算
rand()取0到1之间的随机实数数(无输入参数)
round(arg)四舍五入取整数
sin(arg)
sinh(arg)
sqrt(arg)求二次根
srand(arg)以整数arg为随机数生成器的种子产生随机数
tan(arg)
tanh(arg)
% set a1 3
3
% set a2 5
5
% set z1 [expr {$a1 + $a2}]  
8
% set z2 [expr {$a1 / $a2}] ;#除
0
% set z3 [expr {$a1 % $a2}] ;#取余
3
% set z4 [expr {$a1 >> 1}]  ;#移位
1
% set z5 [expr {$a1 & $z4}] ;#与
1
% set z6 [expr hypot($a1,$a2)] ;#已知两直角边求斜边
5.830951894845301
% set z7 [expr int($z6)]       ;#取整
5

9、incr命令:根据指定的步长来增加或减少参数的值。 

% set a 10;incr a
11
% incr a -1  ;#步长为-1
10
% incr a 8   ;#步长为8
18
% incr a    ;#步长为1(默认为1)
19

10、append命令:将一段字符串连接到另一字符串尾部组成新的字符串。

% set var1 hello
hello
% set var2 world
world
% append var1 $var2
helloworld

11、format命令:根据一组格式说明来格式化字符串

% format "%d" 20  
20
% format "%o" 20 ;#将20转化成8进制数
24
% format "%8o" 20;#将20转化成8进制数,8位位宽
      24
% format "%-8o" 20 ;#将20转化成8进制数,8位位宽,左对齐
24
%  format "%08o" 20  ;#将20转化成8进制数,8位位宽,前面补0;
00000024
%  format "%#08o" 20 ;#将20转化成8进制数,8位位宽,前面补0,前导加OX(这个没加成功,因为8进制);
00000024
% format "%#08x" 20    ;#将20转化成8进制数,8位位宽,前面补0,前导加OX 
0x000014

12、Scan命令;根据格式描述符来解析一个字符串并将对应值赋给后面的变量。返回成功转换的个数。

% set num [scan "abcABC" "%c%c%c"]
97 98 99
% scan "abcABC" {%[a-z]} res
1
% scan "abcABC" {%[a-z]} re
1
% scan "abcABC" {%[a-z]}
abc
% scan "ABCabc" {%[^a-b]} res
1
% puts $res
ABC
% set res [scan "ABCabc" {%2[^a-b]}]
AB

13、binary 命令:二进制存储。

binary format:将数值根据规定模式对TCL的普通数据进行二进制压缩。

binary scan:从二进制数值恢复TCL普通数据。

% set b [binary format "s" 25664]
@d
% binary scan $ "s" var
0
% binary scan $b "s" var
1
% puts $var
25664


% binary scan "abc" "c3" var1 var2 var3
1
% puts $var1
97 98 99

 14、subst命令:在字符串中搜索方括号、美元符号和反斜杠,并对其进行替换。

% set b 22
22
% puts {xxx $b}
xxx $b
% subst {xxx $b}
xxx 22

说明:花括号内对这种替换不阻止。

15、string命令:

set a1 abc
set a2 abd


if { [string compare $a1 $a2]==0}{
	puts "a1 is same as a2"
	} else {puts "a1 isn't same as a2"}

if { [string equal $a1 $a2]}
 {
	puts "a1 is same as a2"
	}
	else {puts "a1 isn't same as a2"} 

% string match a* alpha
1
% string match a* blpha
0
% string match {[ab*]} bell
0
% string match {[ab]*} bell
1
% set pat {[ab]*x}
[ab]*x
% string match $pat box
1
% string match $pat cox
0
% string match $pat aox
1
% string match {[a-z0-9]} 7
1
% string match {[a-z0-8]} 9
0
% set st {apo}
apo
% string match {[a-c][o-q]?} $st
1
% string match {[b-c][o-q]?} $st
0

16、字符串映射:根据字符映射对字符串进行转换,映射以输入、输出表的形式表示。

% string map {f p d l} "food"
pool
% string map {f pp d ll oo a}"food"
%  string map {f pp d ll oo a} "food"
ppall

  • 4
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
VIVADO经常使用TCL脚本对FPGA进行调试,通过JTAG转AXI对内部模块进行控制,但是TCL语言书籍比较少,这边是一个英文的TCL语言学习书籍. 第 1 章. TCL基本知识................................................................................................................1 1.1 什么是TCL..............................................................................................................................1 1.2 TCL自学工具...........................................................................................................................1 1.3 TCL软件包..............................................................................................................................2 1.4 TCL命令格式...........................................................................................................................2 1.5 TCL脚本文件和SOURCE 命令..................................................................................................3 1.6 可执行脚本文件(EXECUTABLE FILE)...........................................................................................3 1.7 获得帮助.................................................................................................................................4 1.7.1 Windows系统.............................................................................................................4 1.7.2 Unix系统......................................................................................................................4 第 2 章. 输出、赋值与替换........................................................................................................5 2.1 PUTS.........................................................................................................................................5 2.2 SET & UNSET..............................................................................................................................5 2.3 替换........................................................................................................................................6 2.3.1 $...................................................................................................................................6 2.3.2 []..................................................................................................................................6 2.3.3 " " 和{}..........................................................................................................................6 2.3.4 \...................................................................................................................................7 第 3 章. 数学表达式与EXPR命令..............................................................................................8 3.1 数学和逻辑运算符..................................................................................................................8 3.2 数学函数.................................................................................................................................8 3.3 数学运算举例.........................................................................................................................9 3.4 INCR命令................................................................................................................................9 第 4 章. 字符串........................................................................................................................10 4.1 基本命令集...........................................................................................................................10 4.2 APPEND命令..........................................................................................................................10 4.3 FORMAT命令..........................................................................................................................10 4.3.1 format命令说明......................................................................................................10 4.3.2 format举例..............................................................................................................11 4.4 SCAN命令.............................................................................................................................12 4.5 BINARY命令...........................................................................................................................13 4.6 SUBST命令..............................................................................................................................14 4.7 STRING 命令...........................................................................................................................15 4.7.1 string 命令列表.........................................................................................................15 4.7.2 字符串比较................................................................................................................16 4.7.3 string match字符串匹配.........................................................................................16 4.7.4 字符串替换................................................................................................................18 4.7.5 字符类别(class)测试.................................................................................................18 4.7.6 字符串映射................................................................................................................19 第 5 章. TCL列表操作..............................................................................................................20 5.1 列表命令集...........................................................................................................................20 5.2 LIST命令.................................................................................................................................20 5.3 CONCAT命令.........................................................................................................................21 5.4 LAPPEND命令........................................................................................................................21 5.5 LLENGTH 命令.........................................................................................................................22 5.6 LINDEX命令............................................................................................................................22 5.7 LRANGE命令..........................................................................................................................22 5.8 LINSERT 和LREPLACE命令........................................................................................................22 5.9 LSEARCH命令.........................................................................................................................23 5.10 LSORT命令.............................................................................................................................24 5.11 JOIN与SPLIT命令...................................................................................................................24 5.12 FOREACH控制结构................................................................................................................27 第 6 章. 数组............................................................................................................................28 6.1 数组的定义与格式................................................................................................................28 6.2 数组变量...............................................................................................................................29 6.3 多维数组...............................................................................................................................29 6.4 数组操作命令.......................................................................................................................30 6.4.1 array get命令.........................................................................................................30 6.4.2 array names命令....................................................................................................30 6.4.3 遍历数组...................................................................................................................31 6.4.4 用数组定义结构........................................................................................................31 第 7 章. 控制结构命令.............................................................................................................32 7.1 IF/ELSE命令............................................................................................................................32 7.2 FOR命令................................................................................................................................33 7.3 WHILE命令.............................................................................................................................33 7.4 BREAK 与 CONTINUE命令........................................................................................................34 7.5 SWITCH命令...........................................................................................................................34 7.6 CATCH 命令...........................................................................................................................35 7.7 ERROR命令............................................................................................................................36 7.8 RETURN 命令...........................................................................................................................37 7.9 EXIT命令................................................................................................................................37 第 8 章. 过程与作用域.............................................................................................................38 8.1 PROC—过程定义命令...........................................................................................................38 8.2 作用域...................................................................................................................................40 8.2.1 过程的作用域............................................................................................................40 8.2.2 变量的作用域............................................................................................................40 8.3 UPVAR命令............................................................................................................................42 8.4 RENAME命令.........................................................................................................................44 8.5 特殊变量...............................................................................................................................45 8.5.1 命令行参数................................................................................................................45 8.5.2 env--环境变量数组...................................................................................................45 8.6 EVAL命令..............................................................................................................................46 8.7 UPLEVEL命令..........................................................................................................................48 第 9 章. 正则表达式(REGULAR EXPRESSIONS)...................................................................49 9.1 REGEXP命令..........................................................................................................................49 9.2 REGSUB命令...........................................................................................................................51 9.3 正则表达式的语法................................................................................................................52 9.3.1 分支(branch)和原子(atom)....................................................................................52 9.3.2 基本语法...................................................................................................................52 9.3.2.1 匹配字符........................................................................................................................................52 9.3.2.2 限定匹配........................................................................................................................................53 9.3.2.3 方括号表达式与字符集.................................................................................................................53 9.3.2.4 匹配分支........................................................................................................................................54 9.3.2.5 量词(Qulifier)...........................................................................................................................54 9.3.2.6 子模式与匹配报告捕获.................................................................................................................55 9.3.2.7 反斜杠引用....................................................................................................................................56 9.3.2.8 匹配优先级....................................................................................................................................56 9.3.3 高级正则表达式(AREs).........................................................................................57 9.3.3.1 反斜杠换码(escape)序列............................................................................................................57 9.3.3.2 归整元素(collating element).....................................................................................................57 9.3.3.3 等价类(equivalence class)........................................................................................................58 9.3.3.4 字符类(character class).............................................................................................................58 9.3.3.5 非贪婪量词....................................................................................................................................59 9.3.3.6 约束量词........................................................................................................................................59 9.3.3.7 回退引用........................................................................................................................................59 9.3.3.8 前瞻(lookahead).........................................................................................................................60 9.3.3.9 换行符敏感的匹配.........................................................................................................................60 9.3.3.10 嵌入式选项...............................................................................................................................60 9.3.3.11 扩展语法...................................................................................................................................60 9.3.4 语法小结...................................................................................................................60 9.3.5 其它支持正则表达式的命令......................................................................................60 第 10 章. 名字空间.................................................................................................................62 10.1 创建名字空间...................................................................................................................62 10.2 用::限定符来使用变量和过程...........................................................................................62 10.3 名字空间的变量...............................................................................................................63 10.4 过程的进口与出口............................................................................................................64 10.5 内省(INTROSPECTION).........................................................................................................65 10.6 名字空间命令集...............................................................................................................65 第 11 章. 跟踪与调试.............................................................................................................67 11.1 CLOCK命令...........................................................................................................................67 11.1.1 clock clicks命令......................................................................................................67 11.1.2 clock seconds命令................................................................................................67 11.1.3 clock format命令...................................................................................................68 11.1.4 clock scan命令.......................................................................................................70 11.2 INFO 命令...............................................................................................................................71 11.2.1 info level..................................................................................................................72 11.2.2 info exists.................................................................................................................72 11.3 TRACE命令............................................................................................................................73 11.3.1 trace variable.........................................................................................................73 11.3.2 trace vdelete..........................................................................................................75 11.3.3 trace vinfo...............................................................................................................75 第 12 章. 脚本库与软件包......................................................................................................76 12.1 声明和使用软件包............................................................................................................76 12.1.1 软件包定位................................................................................................................76 12.1.2 声明软件包命令........................................................................................................76 12.1.3 加载软件包命令........................................................................................................76 12.1.4 自动加载与软件包索引.............................................................................................77 12.1.5 用链接库提供软件包.................................................................................................79 12.2 PACKAGE命令集...................................................................................................................80 12.3 小结..................................................................................................................................80 第 13 章. 文件操作与程序调用...............................................................................................81 13.1 文件操作...........................................................................................................................81 13.1.1 文件I/O....................................................................................................................81 13.1.2 文件系统信息命令.....................................................................................................82 13.1.2.1 glob命令.................................................................................................................................83 13.1.2.2 file命令集.................................................................................................................................83 13.2 程序调用...........................................................................................................................85 13.2.1 用open命令打开一个进程管道..............................................................................85 13.2.2 用exec命令调用程序..............................................................................................87 13.2.3 pid命令....................................................................................................................88 第 14 章. 套接字与事件驱动编程简介....................................................................................89 14.1 套接字编程.......................................................................................................................89 14.1.1 socket命令..............................................................................................................89 14.1.1.1 Client端socket命令..............................................................................................................89 14.1.1.2 Server端socket命令选项......................................................................................................90 14.1.2 用fconfigure配置套接字........................................................................................90 14.1.3 C/S编程举例............................................................................................................90 14.2 事件驱动编程...................................................................................................................93 14.2.1 after命令.................................................................................................................93 14.2.2 fileevent命令..........................................................................................................96 14.2.3 vwait命令................................................................................................................96 14.2.4 fconfigure命令.......................................................................................................97 14.2.4.1 fconfigure语法.......................................................................................................................97 14.2.4.2 非阻塞I/O................................................................................................................................98 14.2.4.3 缓冲..........................................................................................................................................98
Tcl是一种脚本语言编程语言,它是一种简单、易学的编程语言。它的全称是"Tool Command Language",最初是作为一个工具命令语言而设计的。Tcl被广泛用于各种领域,包括网络编程、自动化脚本、测试和嵌入式系统等。 Tcl语言具有许多特性,使其成为编程的理想选择。首先,它有一个简洁的语法,易于学习和使用。Tcl的语法规则非常简单,没有复杂的数据类型和控制结构。这使得编写Tcl脚本变得非常简单和直观。 其次,Tcl具有动态类型系统,这意味着变量不需要事先声明其类型。这使得编写Tcl程序非常灵活,可以根据需求自由地改变变量的类型。 另外,Tcl还具有强大的字符串处理能力。在Tcl中,字符串是一种基本的数据类型,并且有许多内置的字符串操作函数可以用来处理字符串。这使得Tcl在文本处理和解析方面非常强大。 除此之外,Tcl还支持过程化编程和面向对象编程。它具有过程和命名空间的概念,并且可以定义自己的过程和对象。这使得Tcl编程更加模块化和可维护。 对于初学者来说,Tcl学习曲线非常平缓。有许多在线的Tcl语言教程和资源可供学习和参考。这些教程通常包括基本语法、控制结构、变量和过程的使用方法。通过逐步学习这些教程,你可以很快地掌握Tcl的基本知识并开始编写自己的脚本。 总的来说,Tcl是一种简单、实用且灵活的脚本语言编程语言。它适用于各种用途,并且学习起来相对容易。如果你对脚本编程感兴趣,我强烈推荐你学习Tcl

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值