目录
list命令
list 这个概念在 TCL 中是用来表示集合的。TCL 中 list 是由一堆元素组成的有序集合,list 可以嵌套定义,list 每个元素可以是任意字符串,也可以是 list。下面都是 TCL 中的合法的 list:
{} //空 list
{a b c d}
{a {b c} d} //list 可以嵌套
list 是 TCL 中比较重要的一种数据结构,对于编写复杂的脚本有很大的帮助,TCL 提供了很多 基本命令对 list 进行操作。
语法: list ? value value...?
这个命令生成一个 list,list 的元素就是所有的 value。例:
list 1 2 {3 4}
输出:1 2 {3 4}
concat命令
语法:concat list ?list...?
这个命令把多个 list 合成一个 list,每个 list 变成新 list 的一个元素。
set a [list 1 2 {3 4}]
输出:1 2 {3 4}
set b [list a b {c d}]
输出:a b {c d}
set tet [concat $a $b]
输出:1 2 {3 4} a b {c d}
lindex $tet 3 //返回角标为3的元素
输出:a
llength $tet //返回元素个数
输出:6
lindex命令
语法:lindex list index
返回 list 的第 index 个(0-based)元素。例:
lindex {1 2 {3 4}} 2 3 4
输出:3 4
llength命令
语法:llength list
返回 list 的元素个数。例
llength {1 2 {3 4}}
输出:3
linsert命令
语法:linsert list index value ?value...?
返回一个新串,新串是把所有的 value 参数值插入 list 的第 index 个(0-based)元素之前得到。 例:
linsert {1 2 {3 4}} 1 7 8 {9 10}
输出:1 7 8 {9 10} 2 {3 4}
lreplace命令
语法:lreplace list first last ?value value ...?
返回一个新串,新串是把 list 的第 firs (0-based)t 到第 last 个(0-based)元素用所有的 value 参数替换得到的。如果没有 value 参数,就表示删除第 first 到第 last 个元素。例:
lreplace {1 7 8 {9 10} 2 {3 4}} 3 3
输出:1 7 8 2 {3 4}
lreplace {1 7 8 2 {3 4}} 4 4 4 5 6
输出:1 7 8 2 4 5 6
lrange命令
语法:lrange list first last
返回 list 的第 first (0-based)到第 last (0-based)元素组成的串,如果 last 的值是 end。就是 从第 first 个直到串的最后。
lrange {1 7 8 2 4 5 6} 3 end
输出:2 4 5 6
lappend命令
语法:lappend varname value ?value...?
把每个 value 的值作为一个元素附加到变量 varname 后面,并返回变量的新值,如果 varname 不存在,就生成这个变量。例:
lappend a 1 2 3
输出:1 2 3
set a
输出:1 2 3
lsearch命令
语法:lsearch ?-exact? ?-glob? ?-regexp? list pattern
返回 list 中第一个匹配模式 pattern 的元素的索引,如果找不到匹配就返回-1。-exact、-glob、 -regexp 是三种模式匹配的技术。-exact 表示精确匹配;-glob 的匹配方式和 string match 命令的匹配方式相同,将在后面第八节介绍 string 命令时介绍;-regexp 表示正规表达式匹配, 将在第八节介绍 regexp 命令时介绍。缺省时使用-glob 匹配。例:
set a { how are you }
输出:how are you
lsearch $a y* 2 % lsearch $a y?
输出:-1
lsort命令
语法:lsort ?options? list
这个命令返回把 list 排序后的串。options 可以是如下值:
-ascii 按 ASCII 字符的顺序排序比较.这是缺省情况。
-dictionary 按字典排序,与-ascii 不同的地方是:
(1)不考虑大小写
(2)如果元素中有数字的话,数字被当作整数来排序.
因此:bigBoy 排在 bigbang 和 bigboy 之间, x10y 排在 x9y 和 x11y 之间.
-integer 把 list 的元素转换成整数,按整数排序.
-real 把 list 的元素转换成浮点数,按浮点数排序.
-increasing 升序(按 ASCII 字符比较)
-decreasing 降序(按 ASCII 字符比较)
-command command TCL 自动利用 command 命令把每两个元素一一比较,然后给出排序 结果。
split命令
语法:split string ?splitChars?
把字符串 string 按分隔符 splitChars 分成一个个单词,返回由这些单词组成的串。如果 splitChars 是一个空字符{},string 被按字符分开。如果 splitChars 没有给出,以空格为分隔符。例:
split "how.are.you" .
输出:how are you
split "how are you"
输出:how are you
split "how are you" {}
输出:h o w { } a r e { } y o u
join命令
语法:join list ?joinString?
join 命令是命令的逆。这个命令把 list 的所有元素合并到一个字符串中,中间以 joinString 分 开。缺省的 joinString 是空格。例:
join {h o w { } a r e { } y o u} {}
输出:how are you
join {how are you} .
输出:how.are.you