- Tcl的核心命令集可以扩展、被继承、被屏蔽
- 简单的讲,Tcl语言的语法实际上是一些Tcl解释器怎样对Tcl命令进行分析的规则的集合
- 命令之间必须用换行符或分号隔开
- Tcl的每一个命令包含一个或几个单词,第一个单词代表命令名,另外的单词则是这个命令的参数,单词之间必须用空格或Tab键隔开
- Tcl解析器在分析命令时,把所有的命令参数都当做字符串看待
- 变量置换(variable substitution)由$符号标记,会导致变量的值插入一个单词中
//假定‘%’为Tcl的命令提示符,输入命令并回车后,下一行会输出命令执行的结果
%set x 10 //定义变量x,并把x赋值为10
10
%set y $x+100 //y的值是10+100,这里x被置换成它的值10
10+100 //此时y是'10+100’这个字符串,并不是110
- 命令置换(command substitution)是由[]括起来的Tcl命令及其参数标记,会导致某一个命令的全部或部分单词被另一个命令的结果所代替
%set y [expr $x+100]
110
//[]中脚本的值为最后一个命令的返回值。有了命令置换,实际上就表明命令之间是可以嵌套的,即一个命令的结果可以作为别的命令的参数。
- 反斜杠置换(backslash substitution)主要用于在单词符号中插入诸如换行符、空格、[、$等被Tcl解释器当作特殊符号对待的字符。
%set msg multiple\ space //msg的值为multiple space
//如果没有反斜杠的话,解释器会认为最后两个单词之间的空格是分隔符,会认为set命令有多余,就会报错。
图1. 反斜杠
- Tcl解释器对双引号中的各种分隔符将不做处理,只当做普通字符,除了换行符、$、[]这三个。
- 花括号中,所有的字符都将成为普通字符,失去其特殊意义。
- 数组元素的名字包含两部分:数组名和数组中元素的名字。
set day(monday) 1//生成一个名为day的数组和一个数组元素monday,并将值置为1
set day(tuesday) 2//生成一个名为tuesday的数组元素并将值置为2
- 命令unset,从解释器中删除变量,它后面可以有任意多个参数1,每个参数是一个变量名,可以是简单变量,也可以是数组或数组元素。
%unset a b day(monday)
- 命令append把文本继续添加到变量后面
%set txt hello
hello
%append txt "! How are you"
hello! How are you
- 命令incr把一个变量值加上一个整数,它要求原来的值和新加的值都必须是整数。
%set b 2
2
%incr b 3
5
- 操作数通常是整数或实数;整数的第一个字符是0则被看做八进制;前两个字符为0x则被看做十六进制的。
- 运算符和优先级
- Tcl支持的数学函数
- 命令list,用来表示集合
- 命令concat,把多个list合成一个list,每个list变成新list的一个元素
- 命令lindex,用于从一个列表中取得元素。lindex至少要获取两个参数,即一个列表和一个索引值,并返回从列表中取得的元素
%lindex (John Anne Mary Jim) 1
Anne
- 命令llength,返回list中元素的个数。
- 命令linsert,把一个或多个元素插入已经存在的列表,从而形成新的列表
%set x {a b {c d} e}
a b {c d} e
linsert $x 2 X Y Z //将X Y Z从列表的第二位插入
a b X Y Z {c d} e
- 命令Ireplace,替换列表中的部分元素
%Ireplace {1 7 8 {9 10} 2 {3 4}} 3 3 //将list中第三位元素删除
1 7 8 2 {3 4}
%Ireplace {1 7 8 2 {3 4}} 4 4 4 5 6//将list中第四位元素用4 5 6替代
1 7 8 2 4 5 6
- 命令lappend不直接接受列表,而是接受存放的变量
- 命令Isearch在列表中查找指定的元素。它获取两个参数,第一个是一个列表,第二个是一个模式()
- 命令Isort将list中的元素按照一定规律排序
- 命令split把字符串按照字符或者单词分开
没有上机训练很难记住这些语法,并且有些命令貌似是用不到的。先学习到这里。21页左右的地方。
网友评论