查看: 3393|回复: 0

TCL学习笔记(二)——TCL语法

[复制链接]

该用户从未签到

发表于 2012-8-28 11:06:15 | 显示全部楼层 |阅读模式
分享到:
本帖最后由 i电子 于 2012-8-28 11:19 编辑

脚本、命令和单词:在TCL中,这三个概念是从外到内的包含关系,一个脚本文件中可以包含一条或者多条命令,一个命令由由一个或者多个单词组成。举个例子吧,如一下几行代码,整个就是一个脚本文件,其中有三条命令,分隔两条命令可以用回车换行或者分号,在命令中有几个单词,如第一条命令,set是第一个单词,它是一个命令名,而a9分别为第二和第三个单词,它们是set的两个参数,因此不管是命令名还是参数都属于单词,单词之间用空格符分隔。
                                                        set  a  9
                                                        set  b  16 ;set  c  25
         替换:在TCL中有三种替换形式:变量替换、命令替换和反斜线替换。
(1) 变量替换:首先看一个程序:
set  a  9
set b  a
         大家猜想一下,ab的值,a的值一目了然,肯定是9,关键是bb的值会是9吗?那我们来验证一下,如图1所示,a的值没问题,b的值显示是a 1.jpeg
         上面这个例子说明在TCL中间接赋值是行不通的,仔细研究可以发现,在第一条命令中a是一个变量,而在第二条命令中a只是一个字符,那有什么办法能做到间接赋值呢?采用变量替换,可以将TCL变量的值插入单词中,如图2所示例子,在a前面加上变量替换符$,就可以取出变量a的值,此处a不再是一个字符,而是一个变量。
2.jpg
2
(2) 命令替换:一个单词可由变量的值替换,其实也可以由一个命令替换,这种替换称为命令替换,替换符为方括号[ ],如图3中命令,第二条命令中的第三个单词由一条命令替换而成,其中expr这个命令返回表达式$a*4的值,而a的值为2,因此计算得到b的值是8。

3.jpg 3
(3) 反斜线替换:一个单词替换成一些特殊的字符,替换符为反斜杠\,这个与C语言中有些相似,比如\n表示回车换行,\t表示制表符,应该很容易理解。
引用:在TCL中,有类似替换符$、[]这样的特殊字符,TCL解析器需要对它们进行特殊处理,但如果想让这些字符按照正常的字符一样输出,则需要引用,引用并不限定于阻止解析器对特殊字符的处理,类似这种阻止解析器的特殊处理的方式都称为引用。在TCL中有两种引用形式:双引号引用和大括号引用。其中大括号引用取消所有特殊字符的特殊处理,双引号引用取消单词分隔符和命令分隔符的特殊处理。
(1) 双引号引用:如上所述,双引号引用可以取消单词分隔符和命令分隔符的特殊处理,单词分隔符就是空格,命令分隔符是换行或分号。如图4所示,第一条命令中,a、b之间的空格被忽略;第二条命令中,a、b之间的分号和b、c之间的换行被忽略。

4.jpeg 4
         双引号有两个注意:在TCL中,如果检测到一个单词的第一个字符是引号“,则表示引用开始,直到检测到另一个引号”表示结束,因此如果调用双引号引用,引号“必须作为第一个字符。
         另外一个注意就是双引号引用并不会取消特殊字符的处理,如图5所示。

5.jpeg 5
(2) 大括号引用:取消所有特殊字符的处理。如图6所示,
6.jpeg
6
         其实大括号引用的功能包含了双引号引用的功能,图6例子中,空格的特殊处理也被取消了。
         此外,大括号引号还可以嵌套使用,与C语言中的大括号功能类似,就是将多条命令包起来,表示这些命令是一个整体。在TCL中常用于过程定义和命令流控制,关于过程定义和命令流控制在以后学习中详细说明。

回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /4 下一条



手机版|小黑屋|与非网

GMT+8, 2024-11-22 22:03 , Processed in 0.113864 second(s), 16 queries , MemCache On.

ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

苏公网安备 32059002001037号

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.