Tcl语言:基础入门(二)

相关阅读

Tcl语言icon-default.png?t=N7T8https://blog.csdn.net/weixin_45791458/category_12488978.html?spm=1001.2014.3001.5482


Tcl语言:基础入门(二)_第1张图片

变量

        set命令用来给一个变量赋值。它接受两个参数,第一个参数是变量的名字,第二个参数是一个值。变量的名字可以是任意长度的,且区分大小写。需要注意的是,不像C等语言,Tcl语言的变量名可以使用数字开头且可以使用特殊字符,所以下面的都是有效的Tcl赋值格式。但需要注意的是,在进行变量替换(随后讲到)时,Tcl解释器默认只会将$到后面第一个不为数字、字母、下划线之间的看做变量名,如果变量名包含特殊字符(除数字、字母、下划线外的其他字符),需要用{}将变量名包围才能正确完整解析。

%set a       1
%set 1       1
%set _1      1
%set #_1     1
%set $       1

#如果变量名有特殊字符,使用{}进行变量替换
%set c ${_1} 

变量置换

        当定义了变量的值后,我们就可以引用变量从而使用变量的值,但是需要注意的是,在引用一个变量的值时需要在变量名前加$,例如:

%set a 10    #定义a为字符串"10"
10           #这里表示输出为10

%set b a     #定义b为字符串"a",而不是字符串"10"
a            #输出并不是10,因为没有进行变量替换
   
%set b $a    #定义b为字符串"10"
10           #此时进行变量替换,$a被替换为a的值,即字符串"10"

%set b $a+1  #定义b为字符串"10+1",因为变量替换默认进行到$后的第一个特殊字符
10+1         #可以看到结果并不是11,因为Tcl是基于字符串处理的,默认不会进行表达式计算

        在上面代码的最后,我们尝试把b的值设定为表达式10+1计算的结果, 但Tcl默认把所有的表达式当做字符串而不会计算,所以b的值被设定为字符串"10+1"。如果需要进行表达式计算,需要使用其他命令,这就引出了下面会谈到的命令置换。

命令置换

        命令置换可以使命令的返回值成为另一个命令的参数,只需要使用中括号[]包围需要置换的命令即可。如第一章所说的一样,在一个命令处理自己的参数前,它会完成参数中所有的置换,例如:

% set a 1+1         #Tcl不会计算表达式,因此结果为字符串"1+1"
1+1

% set a [expr 1+1]  #expr命令将后面的一个或多个参数当做可以计算的表达式
2

%set a 10
10
%set b [expr $a+1]  #首先执行expr命令并进行变量替换,然后将expr命令的返回值即表达式计算的结果当做    
                    #set的第二个参数
11

        可以看到在上例中的最后,我们同时使用了变量置换和命令置换,其中expr的参数$a+1被替换为字符串10+1,然后expr命令执行,结果为字符串11,随后set命令的第二个参数被替换为字符串11,因此最后b的值为字符串11。

        当[]中存在多个命令时,使用最后一条命令的结果作为置换。例如:

%set a [expr 1+1; expr 2+2] #使用4替换
4

        命令置换和变量置换可以任意深度嵌套,从而搭配完成复杂的工作。

反斜杠置换 

        最后一种置换是反斜杠置换,它被用来将那些有特殊意义的字符转义为字面意思。比如变量替换前缀$、大括号{}、中括号[]、空格、换行符等。例如:

%set a 111\ 222  #如果不使用\转义空格,则空格会被当做参数分隔符,会报错
111 222

#下面两种形式也可以
%set a "111 222" 
111 222

%set a {111 222}
111 222

#转义$
%set a \$b
$b

#转义换行符
%set a expr[111+\
222]
333

        反斜杠还有一些其他用法,如下表所示。

\a 铃(0x7)
\b 退格(0x8)
\f 换页符(0xc)
\n 换行符(\n)
\r 回车符(0xd)
\t 水平制表符(0x9)
\v 垂直制表符(0xb)
\ 将换行符和第二行的前置空格替换为一个空格
\\ 反斜杠自身
\ooo 用1、2或3位八进制的方式指定字符的ASCII码
\xhh 用1或2位十六进制的方式指定字符的ASCII码
\uhhhh 用4位十六进制的方式指定字符的Unicode码
\c 将c转换为字面意,例如\$

你可能感兴趣的:(Tcl语言,tcl)