TCL 学习笔记

本文详细介绍了TCL语言的基础,包括语法结构、变量置换、表达式、List操作、控制流命令以及文件访问。TCL的语法简洁,支持变量、命令和字符串的灵活处理。List作为集合数据类型,提供了丰富的操作命令。在控制流方面,TCL提供了if、while、for、foreach等结构。此外,文章还讨论了文件访问的相关命令,如open、gets、puts等。
摘要由CSDN通过智能技术生成

引言

TCL(tool command language) ,一种解释执行的脚本语言。

语法

TCL语法是一些TCL解释器怎样对TCL命令进行分析的规则的集合

  • 脚本、命令、单词符号
    一个脚本包含一个或多个命令,这些命令之间用换行符或者分号隔开;
    一个命令包括一个或几个单词,第一个单词代表命令名,另外的单词是这个命令的参数,单词之间必须用空格或者TAB分隔开;
    TCL解释器对一个命令的求值过程分两部分:分析和执行。在分析阶段,TCL解释器运用规则把命令分成一个个独立的单词,同时进行必要的置换;在执行阶段,TCl会把第一个单词当做命令名,并查看这个命令是否有定义,如果有,就激活这个命令对应的C/C++的过程,并把所有单词作为参数传递给该命令,让命令过程进行处理。
  • 置换(substitution)
    TCL解释器在分析命令时,把所有的命令参数都当做字符串看待。例如:
set x 10;
set y x + 10

如果我们想告诉TCL解释器我们期望用x的值10而不是x这个字符,就需要用到置换:TCL提供三种形式的置换,变量置换、命令置换、反斜杠置换,每种置换都会导致一个或多个单词本身被其他值所代替,置换可以发生在包括命令名的每一个单词中,而且置换可以嵌套。

  1. 变量置换$(variable substitution)
    变量置换导致变量的值插入到一个单词中:
set x 10;
set y $x+10; #y的值为10+10
  1. 命令置换[ ] (command substitution)
    命令置换会导致某一个命令的所有或部分单词被另一个命令的结果所代替。
set x 10;
set y [expr $x + 10];

当TCL解释器遇到字符[时,就会把随后的expr当做一个命令名,从而激活与expr对应的C/C++过程,并把后面的参数传递给该命令过程进行处理。
[ ]中必须是一个合法的TCL脚本,长度不限,[ ]中脚本的值为最后一个命令的返回值,如:

set x 10;
set y [expr $x + 10; set b 100]; #y的值为100,因为 set b 100 的返回值是100
  1. 反斜杠置换(backslash substitution)
    TCL语言中反斜杠类似于C语言中的用法,主要用于在单词中插入诸如换行符、空格、[、$等被TCL解释器特殊对待的字符,如:
set x muti\ space;

如果不加\,会报错,TCL解释器会认为muti和space是set命令的两个参数。
常用反斜杠置换:

转义序列 替换为
\ddd 八进制 ,转换为对应的ASCII码
\xhh 十六进制 ,转换为对应的ASCII码
\newline space 连接下一行

例如:

set x \111; #I
set y \x48; #H
set z [ expr \
2 + 3]; #5
  1. 双引号和花括号
    除了使用反斜杠,TCL提供另外两种方法使得解释器把分隔符和置换符等特殊字符当做普通字符,不作特殊处理:
    第一种用双引号:对各种分隔符不作处理,但对换行符以及$ [] 两种置换符照常处理。
    第二种用花括号:其中所有字符都不会被特殊处理。
  • 注释
    #为注释符,但是要注意,#必须出现在TCL解释器期望命令的第一个字符出现。例如:
set a 10 #love 报错:会被当做命令的参数
set a 10 ; #love ;代表一个命令的结束,后面是下一个命令的期望位置

变量

  • 简单变量
    一个简单的TCL变量包含两个部分,名字和数值,名字和数值都可以是任意字符串。TCL解释器在分析一个变量置换时,只把$后直到第一个不是字母、数字、下划线之前的单词作为要被置换的变量的名字。例如:
set a 5
set a.1 10;
set b $a.1;
puts $b;#5.1

我们想把a.1这个变量的值赋给b,但是TCL解释器在分析置换变量时,只把从置换变量$后到第一个不是字母数字下划线之前的单词作为变量名字,然后.1字符串紧随其后。
如果即要用置换符$又要变量名中含有非数字字母下划线,可以用{} 将变量名括起来:

set a.1 10;
set b ${a.1};
puts $b;#10
  • 数组
    数组是一些元素的集合 ,TCL的数组和普通计算机语言中的数组有很大的区别,在TCL中,不能单独声明一个数组,数组只能和数组元素一起申明,数组中,数组元素的名字包括两部分,数组名字和元素名字,TCL元素名字(数组下标)可以为任意字符串。例如:
set day(monday) 1;
set day(tusday) 2;

数组元素的置换:

set x $day(monday);
set a tusday;
set y $day($a);
  • 相关命令
  1. set
  2. unset
    从解释器中删除变量,后面可以有任意多的参数,每个参数是一个变量名,可以是简单变量、数组、数组元素。例如:
unset a day(monday) day;
  1. append 和 incr
    append 把一个文本加到变量的后面,改变变量的值。
    incr给一个变量的值加上一个整数,要求变量原来的值和新加的值都必须是整数。

表达式

  • 操作数
    TCL操作数都是整数或实数,如果以0开始,将看作八进制,0x看作十六进制。
  • 运算符和优先级
    和其他语言一致
  • 数学函数
    注意数学函数不是命令,只有在表达式中才有意义。

List

list是TCL中表示集合的,TCL中list是由一堆元素组成的有序集合,list可以嵌套定义,list的每个元素可以是任意字符串,也可以是list,下面都是合法的list:

{
   };
{
   1 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值