Tcl语言:基础入门(二)

相关阅读

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


变量

        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)
\<newline>将换行符和第二行的前置空格替换为一个空格
\\反斜杠自身
\ooo用1、2或3位八进制的方式指定字符的ASCII码
\xhh用1或2位十六进制的方式指定字符的ASCII码
\uhhhh用4位十六进制的方式指定字符的Unicode码
\c将c转换为字面意,例如\$

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/132182.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Shell脚本9】Shell test 命令

Shell test 命令 Shell中的 test 命令用于检查某个条件是否成立&#xff0c;它可以进行数值、字符和文件三个方面的测试。 数值测试 num1100 num2100 if test $[num1] -eq $[num2] thenecho 两个数相等&#xff01; elseecho 两个数不相等&#xff01; fi输出结果&#xff1a…

5种常用Web安全扫描工具,快来查漏补缺吧!

漏洞扫描是一种安全检测行为&#xff0c;更是一类重要的网络安全技术&#xff0c;它能够有效提高网络的安全性&#xff0c;而且漏洞扫描属于主动的防范措施&#xff0c;可以很好地避免黑客攻击行为&#xff0c;做到防患于未然。那么好用的漏洞扫描工具有哪些&#xff1f; 答案…

【黑客】最适合小白的学习顺序

一、黑客是什么 原是指热心于计算机技术&#xff0c;水平高超的电脑专家&#xff0c;尤其是程序设计人员。但后来&#xff0c;黑客一词已被用于泛指那些专门利用电脑网络搞破坏或者恶作剧的家伙。 二、学习黑客技术的原因 其实&#xff0c;网络信息空间安全已经成为海陆空之…

S7-1200PLC和SMART PLC开放式以太网通信(UDP双边通信)

S7-1200PLC的以太网通信UDP通信相关介绍还可以参考下面文章链接: 博途PLC开放式以太网通信TRCV_C指令应用编程(运动传感器UDP通信)-CSDN博客文章浏览阅读2.8k次。博途PLC开放式以太网通信TSENG_C指令应用,请参看下面的文章链接:博途PLC 1200/1500PLC开放式以太网通信TSEND_…

AI:86-基于深度学习的人体姿态估计与运动分析

🚀 本文选自专栏:人工智能领域200例教程专栏 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的代码,详细讲解供大家学习,希望可以帮到大家。欢迎订阅支持,正在不断更新中,…

表格图片太大怎么批量压缩?最简单的批量压缩图片

我们在给表格添加图片的时候&#xff0c;如果体积太大&#xff0c;就会导致图片导入不进去&#xff0c;所以在使用之前最好是选择将图片压缩&#xff0c;有的小伙伴会说几张图片处理起来比较方便&#xff0c;如果是大量的话&#xff0c;就比较废时间了&#xff1b;所以今天就特…

Jmeter接口测试详解

现在对测试人员的要求越来越高&#xff0c;不仅仅要做好功能测试&#xff0c;对接口测试的需求也越来越多&#xff01;所以也越来越多的同学问&#xff0c;怎样才能做好接口测试&#xff1f; 要真正的做好接口测试&#xff0c;并且弄懂如何测试接口&#xff0c;需要从如下几个…

【开源】基于Vue.js的生活废品回收系统的设计和实现

目录 一、摘要1.1 项目介绍1.2 项目详细录屏 二、研究内容三、界面展示3.1 登录注册3.2 资源类型&资源品类模块3.3 回收机构模块3.4 资源求购/出售/交易单模块3.5 客服咨询模块 四、免责说明 一、摘要 1.1 项目介绍 生活废品回收系统是可持续发展的解决方案&#xff0c;旨…

贪吃蛇(c语言)!!源码加解析

目录 1.建议先把源码拿去VS中测试一下了解这个贪吃蛇是什么样的 1.头文件代码 2.源代码 3.测试代码 4.代码详解 1.头文件的解析 2.源代码的解析 1.光标的位置封装函数 2.打印欢迎界面 3.打印整体的一个地图 4.蛇的初始化 &#xff08;重要&#xff09; 5.打印边栏信…

BUUCTF——刮开有奖

打开程序&#xff1a; 就一个这个玩意儿&#xff0c;没有输入框&#xff0c;没有啥的&#xff0c;打开IDA反编译一下&#xff1a; 直接找到WinMain&#xff0c;发现里面只有一个对话框API&#xff08;如果只有一个对话框&#xff0c;那真就没有输入框了&#xff09;&#xff0…

Pytorch从零开始实战09

Pytorch从零开始实战——YOLOv5-Backbone模块实现 本系列来源于365天深度学习训练营 原作者K同学 文章目录 Pytorch从零开始实战——YOLOv5-Backbone模块实现环境准备数据集模型选择开始训练可视化模型预测总结 环境准备 本文基于Jupyter notebook&#xff0c;使用Python3.…

养老院信息展示预约小程序的效果如何

老龄化速度加快及快节奏时代&#xff0c;银发群体的老年生活&#xff0c;儿女往往难以照顾&#xff0c;养老院成为不少家庭或个人的选择&#xff0c;靠谱机构往往能带给老人丰富多彩的生活。 而在高需求的同时&#xff0c;无论对需求者还是养老院本身都存在一定难题&#xff1…

Leetcode-101 对称二叉树

递归&#xff1a;主要思想&#xff1a;对称二叉树是左子树的左孩子右子树的右孩子&#xff0c;左子树的右孩子右子树的左孩子&#xff0c;递归实现思路较为清晰 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* Tr…

为什么要做MBTI职业性格测试?

MBTI职业性格测试是一种成熟的人格测评工具&#xff0c;基于荣格理论发展而来&#xff0c;将人的性格分为16种类型&#xff0c;或内向。或外向&#xff0c;或注重情感&#xff0c;或注重感知。 每种性格各有长处和不足&#xff0c;通过应用mbti职业性格测试&#xff0c;可以方…

字节和美团软件测试面试1000问(含文档)

一、Linux系统应用和环境配置 1、Linux系统的操作命令给我说10个&#xff0c;一般用什么工具远程连接Linux服务器&#xff1f; 2、Linux中的日志存储在哪里&#xff1f;怎么查看日志内容&#xff1f; 3、Linux中top和ps命令的区别&#xff1f; 4、Linux命令运行的结果如何写…

synchronized的原理和Callable接口

目录 ♫synchronized原理 ♪锁升级 ♪锁优化 ♫Callable接口 ♫synchronized原理 我们知道synchronized锁可以控制多个线程对共享资源的访问&#xff0c;两个线程针对同一变量访问就会产生阻塞等待。而synchronized锁并不是一成不变的&#xff0c;它会根据情况进行一次升级。…

自动化测试系列 —— UI自动化测试

UI 测试是一种测试类型&#xff0c;也称为用户界面测试&#xff0c;通过该测试&#xff0c;我们检查应用程序的界面是否工作正常或是否存在任何妨碍用户行为且不符合书面规格的 BUG。了解用户将如何在用户和网站之间进行交互以执行 UI 测试至关重要&#xff0c;通过执行 UI 测试…

自适应AI chatGPT智能聊天创作官网html源码/最新AI创作系统/ChatGPT商业版网站源码

源码简介&#xff1a; 自适应AI chatGPT智能聊天创作官网html源码&#xff0c;这是最新AI创作系统&#xff0c;作为ChatGPT商业版网站源码&#xff0c;它是支持创作、编写、翻译、写代码等。是一个智能聊天系统项目源码。 注意&#xff1a;这个只是网站html源码&#xff0c;要…

8年经验之谈 —— 如何用 JMeter 编写性能测试脚本?

Apache JMeter 应该是应用最广泛的性能测试工具。怎么用 JMeter 编写性能测试脚本&#xff1f; 1. 编写 HTTP 性能测试脚本 STEP 1. 添加 HTTP 请求 img STEP 2. 了解配置信息 HTTP 请求各项信息说明&#xff08;以 JMeter 5.1 为例&#xff09;。 如下图所示&#xff1a;…

第三章《补基础:不怕学不懂概率统计》笔记

3.1 什么是概率 概率亦称“或然率”&#xff0c;它反映随机事件出现的可能性大小&#xff0c;在现实生活中有着极其普遍的应用。 3.1.1 最简单的概率的例子 3.1.2 概率论与数理统计的关系 概率论与数理统计的关系可以概括为&#xff0c;概率论是数理统计的理论基础&#xf…