tcl笔记
1.连续两个$,只解释一次
%set x $$dollar
=>$foo ;#只解释一次,将“ $dollar”用 dollar 的值( foo)代替,
;#命令等效为 set x {$foo},大括阻止替换。
2.方括号“ []”完成命令替换。用“ []”将一条命令括起来,命令执行完成后,返回结果。
% set b [set a 5] ;#set a 5 命令输出的结果赋给 b
=>5
3. ""和{}内的替换
一般的原则是在" "内的替换正常进行,而在{}内的替换有可能会被阻止。
对花括号内的替换操作可以概括为:如果花括号是用做替换操作,则它会阻止内部的嵌套替
换,如例 2-3;如果花括号用做界限符,如过程定义时用做界限过程体时,不阻止替换操作,
其他还有 if 条件语句、循环语句、 switch 语句和过程声明、数学表达式等。
=>The length of hello is 5
%puts stdout {The length of $s is [string length $s]}
=>The length of $s is [string length $s] ;#替换操作被阻止
% set z [expr {$x + $y}] ;#expr 表示进行数学运算,要用[]括起来
=>30 ;#用{}来组织算术表达式,不阻止$替换操作
% if { $x == 10} { puts “x=$x”}
=> x=10 ;#在条件语句中, {}用来界定条件体和执行体,不阻止内部替换
4.数学函数
abs(arg) 取绝对值
set a –10 ; #a=-10
set a [expr abs($a)]; # a=10
ceil(arg) 返回不小于 arg 值的整数值
double(arg) 转换双精度
floor(arg)
fmod 取余(结果为浮点型)
int(arg) 取整
rand() 取 0 到 1 之间的随机实数数(无输入参数)
set a [expr 10 * [expr rand()]];0 到 10 之间随即实数
round(arg) 四舍五入取整数
%set a [expr round(10.5)]; =>11
sqrt(arg) 求二次根
5. 字符串操作命令
[语法]: append varName ?value?
[语法]: format spec value1 value2 ...
valueX 是变元。对每个变元来讲,其关键词可多达 6 部分:
- 位置说明符;
- 标志;
- 字段宽度;
- 精度;
- 长度;
- 转换符。
转换符之外的关键词都可以看作修饰符。
format 举例
% set str [format "%3\$s %1\$s %2\$s" "are" "right" "You"]
=> You are right
%format "%x" 20
=>14 ;# 将 20 转换为十六进制数
%format "%8x" 20
=> 14 ;# 将 20 转换为十六进制数,8 位数据宽度,右对齐
%format "%08x" 20
=>00000014 ;#与上一命令相似,但用 0 添齐
%format "%-8x" 20
=>14 ;#宽度 8 位,左对齐
%format "%#08x" 20
=>0x000014 ;#将 20 转换为十六进制数,并添加前缀”0x”,总宽度为 8 为,右对齐(默认),前导空格用 0 补齐。
% set c [format %c%e%c 40 30000 41 ]
=> ( 3.000000e+004) ;#%c 将整数转换为对应的 ASCII 字符, 40 和 41 分别对应”(“和”)”
% set num [scan Aa %c var1 ]
=> 1 ;#将字符串”Aa”的第一个字符”A”转换为对应整数,并赋值给 var1 变量,返回成功转换个数
% puts $var1
=> 65 ;#字符 A 对应的整数