1,一个TCL脚本可以包含一个或多个命令。命令之间必须用换行符或分号隔开

2,置换 substitution

%set y x+100                               //y的值是x+100,而不是我们期望的110

2.1变量置换variable subtitution     变量置换由一个$符号标记,变量置换会导致变量的值插入一个单词中

    %set y $x+100                   //y的值是10+100,这里x被置换成它的值10

10+100

2.2命令置换 command substitution     命令置换是由[]括起来的TCL命令及其参数,命令置换会导致某一个命令的所有或部分单词被另一个命令的

结果所代替    %set y [expr $x+100]

          110

如果在上例中我们去掉[],那么TCL会报错。因为在正常情况下,TCL解释器只把命令行中的第一个单词作为看作命令,其他的单词都作为

   普通字符串处理,看作是命令的参数。

    %set y [expr $x+100;set b 300]              //y的值为300,因为set b 300的返回值为300

2.3 反斜杠置换  backslash substitution

  set msg multiple\ space      //msg的值为multiple space    mutiple与反斜杠\之间不能有空格

tcl支持的反斜杠置换

        Backslash Sequence Replaced By 
        \a Audible alert (0x7) 
        \b Backspace (0x8) 
        \f Form feed (0xc) 
        \n Newline (0xa) 
        \r Carriage return (0xd) 
        \t Tab (0x9) 
        \v Vertical tab (0xb) 
        \ddd Octal value given by ddd 
        (one, two, or three d's) 
        \xhh Hex value given by hh

        (any number of h's) 
        \ newline space A single space character

%set a [expr \                 // 对应\newline space,一个命令可以用\newline转到下一行继续
           2+3] 
           5

3,双引号和花括号

除了使用反斜杠外,TCL提供另外两种方法来使得解释器把分隔符和置换符等特殊字符当作普通字符,而不作特殊处理,这就要使用双引号和花括号({})。TCL解释器对双引号中的各种分隔符将不作处理,但是对换行符 及$和[]两种置换符会照常处
理。例如

%set x 100 
100
%set y "$x ddd" 
100 ddd

set msg “mutiple\  space”
mutiple  space                            
 
set a 100 ; # a comment
100
set  "b 100 ; #not a comment "
can't read  "b 100 ; #not a comment "  : not  such avriable

而在花括号中,所有特殊字符都将成为普通字符,失去其特殊意义,TCL解释器不会对其作特殊处理。

4 ,变量

TCL解释器在分析一个变量置换时,只把从$符号往后直到第一个不是字母、数字或下划线的字符之间的单词符号作为要被置换的变量的名字。例如:

% set a 2 
2
set a.1 4 
4
% set b $a.1 
2.1

%set b ${a.1} 
4

5, 数组

在TCL中,不能单独声明一个数组,数组只能和数组元素一起声明。数组中,数组元素的名字包含两部分:数组名和数组中元素的名字,TCL中数组元素的名字(下标〕可以为任何字符串。例如:

set day(monday) 1 
set day(tuesday) 2

第一个命令生成一个名为day的数组,同时在数组中生成一个名为monday的数组元素,并把值置为1,第二个命令生成一个名为tuesday的数组元素,并把值置为2。

TCL不能支持复杂的数据类型,这是一个很大的缺憾,也是TCL受指责很多的方面。但是TCL的一个扩展ITCL填补了这个缺憾

6.命令

6.1   set 定义变量

6.2    unset 删除变量     % unset a b day(monday)    //语句中删除了变量a、b和数组元素day(monday),但是数组day并没有删除

6.3    append 和incr

append命令把文本加到一个变量的后面,例如:

                % set txt hello 
                hello
                % append txt "! How are you" 
                hello! How are you

incr命令把一个变量值加上一个整数。incr要求变量原来的值和新加的值都必须是整数。

          %set b a  
           a
          % incr b 
          expected integer but got "a" 
          %set b 2

           2
          %incr b 3 
           5

Tcl语言笔记之一的更多相关文章

  1. TCL语言笔记:TCL基础语法

    一.什么是TCL Tcl 全称是 Tool command Language.它是一个基于字符串的命令语言,基础结构和语法非常简单,易于学习和掌握. Tcl 语言是一个解释性语言,所谓解释性是指不象其 ...

  2. TCL语言笔记:TCL中的数组

    一.介绍 Tcl 中的数组和其他高级语言的数组有些不同:Tcl 数组元素的索引,或称键值,可以是任意的字符串,而且其本身没有所谓多维数组的概念.数组的存取速度要比列表有优势,数组在内部使用散列表来存储 ...

  3. TCL语言笔记:TCL中的控制结构命令

    一.引言 控制结构允许程序根据不同的状态.条件和参数来选择不同的处理和执行路径,从而使代码具有更强的灵活性.健壮性和可读性. Tcl 提供了 if.if/else.if/elseif.foreach. ...

  4. TCL语言笔记:TCL中的数学函数

    一.TCL数学函数列表 函数名 说明 举例 abs(arg) 取绝对值 set a –10  ; #a=-10 set a [expr abs($a)]; # a=10 acos(arg) 反余弦 s ...

  5. TCL语言笔记:TCL中的列表操作

    一.介绍 列表则是具有特殊解释的字符串.Tcl 中的列表操作和其它 Tcl 命令一样具有相同的结构.列表可应用在诸如 foreach 这样的以列表为变元的循环命令中,也应于构建 eval 命令的延迟命 ...

  6. TCL语言笔记:TCL中的String命令

    一.介绍 字符串是 Tcl 中的基本数据类型,所以有大量的字符串操作命令.一个比较重要的问题就是模式匹配,通过模式匹配将字符串与指定的模式(格式)相匹配来进行字符串的比较.搜索等操作. 二.strin ...

  7. Tcl语言笔记之二

    1,表达式 1.1 操作数 TCL表达式的操作数通常是整数或实数.整数一般是十进制的, 但如果整数的第一个字符是0(zero),那么TCL将把这个整数看作八进制的,如果前两个字符是0x则这个整数被看作 ...

  8. TCL语言笔记:TCL练习二

    一.练习 1.二进制转十进制 proc b2d {b} { ;set len [string length $b] } {$i<$len} {incr i} { incr sum [expr , ...

  9. TCL语言笔记:TCL练习

    一.关于随机数的练习 1.随机生成一个最大值到最小值之间的整数 proc random {min max} { return [expr round(($max-$min)*rand()+$min)] ...

随机推荐

  1. 基于Visual C++2013拆解世界五百强面试题--题7-链表的各种操作

    请用C实现一个链表,实现链表的查找,逆置,替换,删除,添加,清空,创建. 查找.替换和删除.添加里面都会用到遍历链表的操作,所以重点在于遍历, 链表的逆置和清空考虑到效率,我们可以用递归实现, 至于创 ...

  2. TableLayoutPanel 的使用

    VS自带控件TableLayoutPanel的功能应用网上都有资料.下面是使用中的一些问题. 1.动态加载控件时使用SetRowSpan.SetColumnSpan方法会使得界面响应缓慢 解决方案: ...

  3. C++类成员常量

    由于#define 定义的宏常量是全局的,不能达到目的,于是想当然地觉得应该用const 修饰数据成员来实现.const 数据成员的确是存在的,但其含义却不是我们所期望的.const 数据成员只在某个 ...

  4. Winet API 支持HTTPP/SOCKS代理

    源程序 1.Winet API 支持使用IE代理.或者不使用代理.或者使用自定义代理三种方式. 2.使用自定义代理的话,支持HTTP代理,SOCKS代理,但是SOCKS代理不知支持用户名密码,HTTP ...

  5. Objective-c中@interface、@implementation、@protocal

    以下 void print(); }; class AC{ }; 这时候,AI和AC是独立存在,AC不会因为没有和AI建立关系而编译错误,将AC做以下修改后,AI才和AC建立了关系,AC必须实现AI中 ...

  6. Android.mk的用法和基础

    一个Android.mk file用来向编译系统描述你的源代码.具体来说:该文件是GNU Makefile的一小部分,会被编译系统解析一次或多次.你可以在每一个Android.mk file中定义一个 ...

  7. jQ 操作积累

    1.判断radio是否选中:方式一:var val=$('input:radio[name="sex"]:checked').val(); //(val==null 未选中) 方式 ...

  8. 解决Windows 7下IE11无法卸载、无法重新安装,提示安装了更新的IE版本

    2013年12月14日 iefans 有用户反馈在Windows 7系统上安装IE11时发现安装程序似乎出了问题,等待了很长时间都没有响应之后就断开了电脑的电源.之后IE11浏览器虽然能使用,却无法安 ...

  9. Linq to sql介绍及增、删、改、查

    LinQ是指集成化查询语言,通过映射将数据库内的表名变为C#的类名,将列名作为属性名,将表的关系作为类的成员对象.O--M--R O-Object对象 R-Relation关系 M-Mapping映射 ...

  10. VPN连接在遇到飞鱼星设备时可能出现的疑难问题

    在连接VPN设备时,设置都是正常的.在