1、puts:输出命令,将字符串输出到标准输出channelld
% set a 10 ;#赋值变量a=10
10
% puts a ;#输出字符串a
a
% puts $a ;#输出字符串a所引用的变量
10
2、set or unset:变量定义和赋值命令
set:使用时不必指用变量值类型,因为变量值类型仅为一种(字符串),赋值时,会为变量开辟内存空间存储变量值。
unset:取消变量定义,并且释放变量所占用的内存空间。
% set a 10 ;#变量a赋值10
10
% unset a ;#释放变量
% puts $a ;#输出字符串a所引用的变量
can't read "a": no such variable ;#由于a赋值的变量已经释放掉,所以没有有效值
%set a hello
hello
%set a "hello world" ;#需要注意的是当变量多于一个词时,应该加“”,使其认为为一个整体的字符串。
hello world
3、$:替换,实现引用替换、用以引用参数值。
% set a hello
hello
% set b hi
hi
% set c $$b ;#$只能进行一次替换,不支持嵌套
$hi
% set d $c
$hi
4、[ ]:完成命令替换。用“[ ]”将一条命令括起来,命令执行完成后,返回结果。
% set b [set a 5] ;#set a 5命令输出赋值给b
5
% set c [expr 5*10] ;#expr 5 *10的计算结果赋值给C
50
5、“ ”和{ }:双引号和大括号将多个单词组织成一个参数,也是一种替换操作。一般原则:“ ”内的替换正常进行。{ }内的替换可能被阻止。{ }会阻止内部的嵌套替换。
% set a hello
hello
% set a hello world ;#没有使用“”或{}导致不符合Set命令
wrong # args: should be "set varName ?newValue?"
% set a {hello world}
hello world
% set a "hello world" ;#“”和{}将多个单词组织成一个参数
hello world
% puts stdout "The length of\"$a\" is [string length $a]" ;#""内的嵌套正常进行
The length of"hello world" is 11
% puts stdout {The length of"\$a"\ is [string length $a]} ;#{}内的嵌套被阻止
The length of"\$a"\ is [string length $a]
6、\:作用时引用特殊字符、续行
% set x 100
100
% set y "$x" ;#引用变量a的值赋给y
100
% set y "\$x" ;#加入\代表$x为特殊符号
$x
% puts "he\nllo" ;# \n换行符
he
llo
% set b [puts \ ;#适用于一行命令写不下,换行继续写
$y]
$x
7、数学和逻辑运算符
运算符 | 说明 |
- + ~ ! | 一元减(取负)、一元加(取正)、比特反、逻辑非 |
* / % | 乘、除、取余(二元操作符) |
+ - | 加、减(二元操作符) |
<< >> | 左移、右移(二元操作符) |
< <= > >= | 布尔小于、小于或等于、大于、大于或等于 |
== != | 布尔等、不等 |
& | 比特与 |
^ | 比特异或 |
| | 比特或 |
&& | 逻辑与 |
|| | 逻辑或 |
x ? y:z | 三重操作符:根据x的值在y和z两个结果中进行选择。x为true(=1)选择y,反之选择z。 |
8、数学函数
函数名 | 说明 |
abs(arg) | 取绝对值 |
acos(arg) | 反余弦 |
asin(arg) | 反正弦 |
atan(arg) | 反正切 |
atan2 | 比值取反正切 |
ceil(arg) | 返回不小于arg值的整数值 |
cos(arg) | 余弦 |
cosh(arg) | 双曲余弦 |
double(arg) | 转换双精度 |
exp(arg) | exp运算(e的幂) |
floor(arg) | |
fmod | 取余(结果为浮点型) |
hypot(x,y) | 根据直角三角形两直边长度计算出斜边长度 |
int(arg) | 取整 |
log(arg) | 自然对数 |
log10(arg) | 以十为底的对数 |
pow | 幂运算 |
rand() | 取0到1之间的随机实数数(无输入参数) |
round(arg) | 四舍五入取整数 |
sin(arg) | |
sinh(arg) | |
sqrt(arg) | 求二次根 |
srand(arg) | 以整数arg为随机数生成器的种子产生随机数 |
tan(arg) | |
tanh(arg) |
% set a1 3
3
% set a2 5
5
% set z1 [expr {$a1 + $a2}]
8
% set z2 [expr {$a1 / $a2}] ;#除
0
% set z3 [expr {$a1 % $a2}] ;#取余
3
% set z4 [expr {$a1 >> 1}] ;#移位
1
% set z5 [expr {$a1 & $z4}] ;#与
1
% set z6 [expr hypot($a1,$a2)] ;#已知两直角边求斜边
5.830951894845301
% set z7 [expr int($z6)] ;#取整
5
9、incr命令:根据指定的步长来增加或减少参数的值。
% set a 10;incr a
11
% incr a -1 ;#步长为-1
10
% incr a 8 ;#步长为8
18
% incr a ;#步长为1(默认为1)
19
10、append命令:将一段字符串连接到另一字符串尾部组成新的字符串。
% set var1 hello
hello
% set var2 world
world
% append var1 $var2
helloworld
11、format命令:根据一组格式说明来格式化字符串
% format "%d" 20
20
% format "%o" 20 ;#将20转化成8进制数
24
% format "%8o" 20;#将20转化成8进制数,8位位宽
24
% format "%-8o" 20 ;#将20转化成8进制数,8位位宽,左对齐
24
% format "%08o" 20 ;#将20转化成8进制数,8位位宽,前面补0;
00000024
% format "%#08o" 20 ;#将20转化成8进制数,8位位宽,前面补0,前导加OX(这个没加成功,因为8进制);
00000024
% format "%#08x" 20 ;#将20转化成8进制数,8位位宽,前面补0,前导加OX
0x000014
12、Scan命令;根据格式描述符来解析一个字符串并将对应值赋给后面的变量。返回成功转换的个数。
% set num [scan "abcABC" "%c%c%c"]
97 98 99
% scan "abcABC" {%[a-z]} res
1
% scan "abcABC" {%[a-z]} re
1
% scan "abcABC" {%[a-z]}
abc
% scan "ABCabc" {%[^a-b]} res
1
% puts $res
ABC
% set res [scan "ABCabc" {%2[^a-b]}]
AB
13、binary 命令:二进制存储。
binary format:将数值根据规定模式对TCL的普通数据进行二进制压缩。
binary scan:从二进制数值恢复TCL普通数据。
% set b [binary format "s" 25664]
@d
% binary scan $ "s" var
0
% binary scan $b "s" var
1
% puts $var
25664
% binary scan "abc" "c3" var1 var2 var3
1
% puts $var1
97 98 99
14、subst命令:在字符串中搜索方括号、美元符号和反斜杠,并对其进行替换。
% set b 22
22
% puts {xxx $b}
xxx $b
% subst {xxx $b}
xxx 22
说明:花括号内对这种替换不阻止。
15、string命令:
set a1 abc
set a2 abd
if { [string compare $a1 $a2]==0}{
puts "a1 is same as a2"
} else {puts "a1 isn't same as a2"}
if { [string equal $a1 $a2]}
{
puts "a1 is same as a2"
}
else {puts "a1 isn't same as a2"}
% string match a* alpha
1
% string match a* blpha
0
% string match {[ab*]} bell
0
% string match {[ab]*} bell
1
% set pat {[ab]*x}
[ab]*x
% string match $pat box
1
% string match $pat cox
0
% string match $pat aox
1
% string match {[a-z0-9]} 7
1
% string match {[a-z0-8]} 9
0
% set st {apo}
apo
% string match {[a-c][o-q]?} $st
1
% string match {[b-c][o-q]?} $st
0
16、字符串映射:根据字符映射对字符串进行转换,映射以输入、输出表的形式表示。
% string map {f p d l} "food"
pool
% string map {f pp d ll oo a}"food"
% string map {f pp d ll oo a} "food"
ppall