介绍
TCL(Tool Command Language)是一种解释执行的脚本语言(Scripting Language)。它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。
由于TCL的解释器是用一个C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作一个C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,每个应用程序都可以根据自己的需要对TCL语言进行扩展。
扩展后的TCL语言将可以集成TCL核心部分的所有功能,包括核心命令、控制结构、数据类型、对过程的支持等;TCL良好的可扩展性使得它能很好地适应产品测试的需要,目前已成为自动测试中事实上的标准。
linux下tcl运行准备
在linux下,可以执行tclsh来进入tcl的编译环境,在输入tclsh后,将看到一个%的提示符,这表明我们已经处在了tcl的环境中。
要通过tclsh进入tcl编译环境,首先得确认linux中安装了tcl解释器,其一般是/usr/bin/tclsh
对于任何的tcl文件,其第一行必须是类似于 #!/usr/bin/env tclsh的,用来指定脚本语言编译器的位置。
脚本学习核心
- TCL脚本执行依赖于解释器(逐行执行)。
- TCL有效命令行以命令+字符串(结合空格间隔符)形成。
- 明白置换($、[]、)和引用(""、{})的差别和联系。
- 理解命令eval、expr、source、exec的差别。
- 掌握{*}配合glob等返回list后的操作。
基础语法
一个TCL脚本可以包含一个或多个命令。命令之间必须用换行符或分号隔开,下面的两个脚本都是合法的:
set a 1
set b 2
或 set a 1;set b 2
//TCL在识别时,会把set识别为命令,其余均为字符串
TCL的每一个命令包含一个或几个单词,第一个单词代表命令名 ,另外的单词则是这个命令的参数,单词之间必须用空格或TAB键隔开。
TCL解释器在分析命令时,把所有的命令参数都当作字符串看待,例如:
上例的第二个命令中,x被看作字符串x+100的一部分,如果我们想使用x的值’10’,就必须告诉TCL解释器:我们在这里期望的是变量x的值,而非字符"x"。怎么告诉TCL解释器呢,这就要用到TCL语言中提供的置换功能
。
- TCL提供三种形式的置换:
1.变量置换
2.命令置换
3.反斜杠置换。
变量置换
变量置换由一个$符号标记,变量置换会导致变量的值插入一个单词中。例如:
这时,y的值还不是我们想要的值110,而是10+100,因为TCL解释器把10+100看成是一个字符串而不是表达式,y想要得到值110,还必须用命令置换,使得TCL会把10+100看成一个表达式求值。
命令置换
命令置换是由[]括起来的TCL命令及其参数,命令置换会导致某一个命令的所有或部分单词被另一个命令的结果所替代。例如:
y的值是110,这里当TCL解释器遇到字符’['时,它就会把随后的expr作为一个命令名,从而激活与expr对于的C/C++过程,并把’expr’和变量置换后得到的’10+100’传递给该命令过程进行处理。
如果在上例中我们去掉[],那么TCL会报错。因为在正常情况下,TCL解释器只把命令行中的第一个单词作为看作命令,其它的单词都作为普通字符串处理,看作是命令的参数。
反斜杠置换
TCL语言中的反斜杠置换类似于C语言中反斜杠的用法,主要用于在单词符号中插入诸如换行符、空格、[、$等被TCL解释器当作特殊符号对待的字符。例如:
如果没有’‘的话,TCL会报错,因为解释器会把这里最后两个单词之间的空格认为是分隔符,于是发现set命令有多于两个参数,从而报错。加入了’'后,空格不被当作分隔符,'multiple space’被认为是一个单词(word)。
除了使用反斜杠外,TCL提供另外两种方法来使得解释器把分隔符和置换符等特殊字符当作普通字符,而不做特殊处理,这就要使用双引号和花括号{}。
TCL解释器对双引号中的各种分隔符将不做处理,但是对换行符及$和[]两种置换符会照常处理。
注释符
TCL中的注释符’#’,’#'和直到所在行结尾的所有字符都被TCL看作注释,TCL解释器对注释将不做任何处理。
关注作者
- 自述
作者是一位中科大数字设计专业的研究生,水平有限,如有错误,请大家指正,想要与大家一同进步。 - 经历
曾获得国家奖学金,“高教社杯”数学建模国家二等奖等 - 陆续更新:
1.与verilog数字设计相关的一些基础模块设计
2.SV与UVM
3.数字IC设计/验证过程中一些工具及语言的用法
4.保研与竞赛经历等 - 微信公众号
欢迎大家关注公众号“数字IC小白的日常修炼”,期待与大家一同仗剑遨游数字IC世界。