目录
- 3.1 简单变量
- 3.2 数组
- 3.3 Tcl的内部数据存储
- 3.4 预定义变量
Tcl类型支持两种类型的变量:
- 简单变量
- 关联数组
-
创建
set varName [value]
- 名字可以是任意字符串,区分大小写。
- set用来创建、读取和修改变量,需要1或2个参数。第一个参数为变量名,第二个参数为变量值,没有第二个参数则代表读取已有变量的值。
- Tcl变量在赋值时自动创建。
-
使用变量值(替换)
$varName
-
移除变量
unset [-nocomplain] [--] varName1 [varName2...]
- 删除varName指定的变量。返回一个空字符串。
- 如果要求删除不存在的变量,则需要设置
-nocomplain
。
-
改变变量值
incr varName [increment]
- 参数为变量名和一个整数增量(可正可负),将整数加到变量值上,返回变量的新值。
- 如果省略增量参数,则增量默认为1。
- Tcl8.5新增对不存在的整数操作,默认新建值为0的整数,然后加上增量。
append varName value1 [value2...]
- 将文本添加到一个变量的结尾。
-
Tcl还提供了很多其他用于变量操纵的命令:如trace、global、upvar、namespace等。
-
定义
- 数组是元素的集合,每一个元素是有自己的名称和值的变量。
- 数组元素的名称由两部分组成:数组名和数组中的变量名。
-
特点
- Tcl的数组也被称为关联数组,是无需的数据结构。这与C语言的数组不同。
-
创建
set arrayName(varName) [value]
其实就是按一定规则命名的变量的集合。varName
取类似x,y
的命名即可实现多维数组的效果。 -
使用元素值(替换)
$arrayName($varName)
注意:元素名可能有空白字符,可以使用转义或将整个变量名用双引号括起来。 -
移除数组或元素 与变量方法一致。
-
查询数组中的元素
array option arrayName
array size arrayName
:返回数组元素个数。array names arrayName
:返回指定数组的元素名列表。array exists arrayName
:返回数组是否存在。array get
与array set
:用于数组和字典之间的转化。 例子:set a(a1) 1 set a(a2) 2 set a(a3) 3 set a(a4) 4 array size a # 4 array names a # a3 a4 a1 a2 array exists a # 1 set b [array get a] # a3 3 a4 4 a1 1 a2 2 array set c $b lsort [array names c] # a1 a2 a3 a4
- 为了避免每次使用都进行字符串转换,Tcl解释器会自动的把这些值在他们的内部表达形式和字符串表达形式之间转换。
- 内部表达形式可以高效率地处理变量,字符串表达形式允许使用同样的方法来处理不同的值,而且更容易进行通信。
“闪烁”:变量在字符串形式与内部形式之间反复转换的过程。
- 使用不修改内部表达形式的命令来操纵变量。(如列表,算术命令)
- 尽量避免强制使用字符串表达形式。
Tcl库自动创建和管理了一些全局变量。
变量名值argv0存放tclsh或wish调用的脚本文件的文件名argv以列表形式存放命令行参数argc存放命令行参数的个数env数组变量,其元素是所有过程的环境变量