当前位置: 首页 > news >正文

TCL语法

目录

脚本、命令和单词符

置换

变量置换

命令置换

反斜杠置换

双引号和花括号

注释


脚本、命令和单词符

一个 TCL 脚本可以包含一个或多个命令。命令之间必须用换行符或分号隔开

set a 1

set b 2

或者

set a 1;set b 2                都是合法的

TCL 的每一个命令包含一个或几个单词,第一个单词代表命令名,另外的单词则是这个命令的参数,单词之间必须用空格或 TAB 键隔开。

TCL 解释器对一个命令的求值过程分为两部分:分析和执行。在分析阶段,TCL 解释器运用规 则把命令分成一个个独立的单词,同时进行必要的置换(substitution); 在执行阶段,TCL 解 释器会把第一个单词当作命令名,并查看这个命令是否有定义,如果有定义就激活这个命令对应 的 C/C++过程,并把所有的单词作为参数传递给该命令过程,让命令过程进行处理。

置换

TCL 解释器在分析命令时,把所有的命令参数都当作字符串看待

set x 10         //定义变量 x,并把 x 的值赋为 10

set y x+100 //y 的值是 x+100,而不是我们期望的 110

x 被看作字符串 x+100 的一部分,如果我们想使用 x 的值'10' ,就必 须告诉 TCL 解释器:我们在这里期望的是变量 x 的值,而非字符'x'。怎么告诉 TCL 解释器呢, 这就要用到 TCL 语言中提供的置换功能。

TCL 提供三种形式的置换:变量置换、命令置换和反斜杠置换。每种置换都会导致一个或多个单词本身被其他的值所代替。置换可以发生在包括命令名在内的每一个单词中,而且置换可以嵌套

变量置换

变量置换由一个$符号标记,变量置换会导致变量的值插入一个单词中

set y $x+100         //y 的值是 10+100,这里 x 被置换成它的值 10

这时,y 的值还不是我们想要的值 110,而是 10+100,因为 TCL 解释器把 10+100 看成是 一个字符串而不是表达式,y 要想得到值 110,还必须用命令置换,使得 TCL 会把 10+100 看 成一个表达式并求值。

命令置换

命令置换是由[]括起来的 TCL 命令及其参数,命令置换会导致某一个命令的所有或部分单词被另一个命令的结果所代替

set y [expr $x+100]        //输出结果y是110

这里当 TCL 解释器遇到字符'['时,它就会把随后的 expr 作为一个命令名,从而激活与 expr 对应的 C/C++过程,并把'expr'和变量置换后得到的'10+110'传递给该命令过程进行处理。 如果在上例中我们去掉[],那么 TCL 会报错。因为在正常情况下,TCL 解释器只把命令行中的第一个单词作为看作命令,其他的单词都作为普通字符串处理,看作是命令的参数

注意,[]中必须是一个合法的 TCL 脚本,长度不限。[]中脚本的值为最后一个命令的返回值。

set y [expr $x+100;set b 300] //y 的值为 300,因为 set b 300 的返回值为 300

有了命令置换,实际上就表示命令之间是可以嵌套的,即一个命令的结果可以作为别的命令的参 数。

反斜杠置换

TCL 语言中的反斜杠置换类似于 C 语言中反斜杠的用法,主要用于在单词符号中插入诸如换行 符、空格、[、$等被 TCL 解释器当作特殊符号对待的字符

set msg multiple\ space //msg 的值为 multiple space。

如果没有'\'的话,TCL 会报错,因为解释器会把这里最后两个单词之间的空格认为是分隔符, 于是发现 set 命令有多于两个参数,从而报错。加入了'\'后,空格不被当作分隔符,'multiple space'被认为是一个单词(word)。

set msg money\ \$3333\ \nArray\ a\[2]        //这个命令的执行结果为:

money $3333

Array a[2]

例子:

set a \x48         //对应 \xhh

H         //十六进制的 48 正好是 72,对应 H

set a \110         //对应 \ddd

H         //八进制的 110 正好是 72,对应 H

set a [expr \         // 对应\newline space,一个命令可以用\newline 转到下一行继续         

          2+3]

5

双引号和花括号

除了使用反斜杠外,TCL 提供另外两种方法来使得解释器把分隔符和置换符等特殊字符当作普通字符,而不作特殊处理,这就要使用双引号和花括号({})

TCL 解释器对双引号(“”)中的各种分隔符将不作处理,但是对换行符/ 及$和[]两种置换符会照常处理

set x 100

100

set y "$x ddd"

100 ddd

而在花括号中,所有特殊字符都将成为普通字符,失去其特殊意义,TCL 解释器不会对其作特 殊处理。

set y {/n$x [expr 10+100]}

/n$x [expr 10+100]

注释

TCL 中的注释符是'#','#'和直到所在行结尾的所有字符都被 TCL 看作注释,TCL 解释器对注 释将不作任何处理。不过,要注意的是,'#'必须出现在 TCL 解释器期望命令的第一个字符出现 的地方,才被当作注释。 例如:

#This is a comment

set a 100 #         Not a comment

输出:wrong # args: should be "set varName ?newValue?"

set b 101 ; # this is a comment

输出:101

第二行中'#'就不被当作注释符,因为它出现在命令的中间,TCL 解释器把它和后面的字符当作 命令的参数处理,从而导致错误。而第四行的'#'就被作为注释,因为前一个命令已经用一个分 号结束,TCL 解释器期望下一个命令接着出现。现在在这个位置出现'#',随后的字符就被当作注释了。

相关文章:

TCL语法

目录 脚本、命令和单词符 置换 变量置换 命令置换 反斜杠置换 双引号和花括号 注释 脚本、命令和单词符 一个 TCL 脚本可以包含一个或多个命令。命令之间必须用换行符或分号隔开。 set a 1 set b 2 或者 set a 1;set b 2 都是合法的 TC…...

Partial convolution Gated convolution

组会讨论帖 1. 图像修复 图像修复(Image Inpainting),顾名思义,就是将图像中损坏的部分修复起来,是一种图像编辑技术,可以应用在移除物体、修复老照片、图像补全(eg,地震插值)等等。…...

量化投资 无套利 No-arbitrage

文章目录 量化投资 无套利 No-arbitrageState of Nature市场域 Market Span 套利 Arbitrage无套利和正线性定价规则 No-arbitrage and Positive Linear Pricing RuleImplication 1: One-price PrincipleImplication 2: PositivityImplication 3: AdditivityImplication 4: Homo…...

小程序容器助力智能移动门户统一

智能移动统一门户遵循“统一规划,统一标准,统一建设,统一运维”的指导思想。它灵活运用前端展示平台,微服务后端平台,流程引擎,规则引擎,非结构化数据平台,即时通讯平台,…...

opencv-python相机标定详解

文章目录 角点检测查看角点标定 opencv中内置了张正友的棋盘格标定法,通过一些姿态各异的棋盘格图像,就能标定相机的内外参数。 角点检测 第一步是角点检测,首先需要读取棋盘格图像 import numpy as np import cv2 import ospath imgs #…...

由斯坦福、Nautilus Chain等联合主办的 Hackathon 活动,现已接受报名

由 Stanford Blockchain Accelerator、Zebec Protocol、 Nautilus Chain、Rootz Lab 共同主办的黑客松活动,现已接受优秀项目提交参赛申请。 在加密行业发展早期,密码极客们就始终在对区块链世界基础设施,在发展方向的无限可能性进行探索。而…...

PBDB Data Service:Measurements of specimens(标本测量)

Measurements of specimens(标本测量) 描述参数以下参数可用于指定您感兴趣的标本种类以下参数可用于筛选所选内容以下参数还可用于根据分类筛选结果列表以下参数可用于生成数据存档您可以使用以下参数选择要检索的额外信息,以及要获取记录的…...

低调的接口工具 ApiKit

最近发现一款接口测试工具--ApiKit,我们很难将它描述为一款接口管理工具 或 接口自测试工具。 官方给了一个简单的说明,更能说明 Apikit 可以做什么。 ApiKit API 管理 Mock 自动化测试 异常监控 团队协作 ApiKit的特点: 接口文档定义&a…...

opengauss 的回归测试

目录 一、回归测试说明 二、单独执行测试用例(开发调试) 一、回归测试说明 opengauss/postgresql 的回归测试,通过执行SQL比较输出打印,判断代码修改是否改变了其它功能逻辑。 OG的回归测试大体上和PG类似,主要是通…...

计算机组成原理基础练习题第四章-计算机的运算方法

对真值0表示形式唯一的机器数是()。A、原码    B、补码和移码C、反码    D、以上都不对在整数定点机中,下述说法正确的是()。A、原码和反码不能表示-1,补码可以表示-1B、三种机器数均可表示-1C、三种机器数均可表示…...

SpringBoot定时任务里的多线程

SpringBoot定时任务里的多线程 提示前言遇到的问题验证与解决验证单线程执行单任务分析代码及结果 单线程执行多任务 解决实现单任务的多线程为每个任务创建一个子线程 解决多任务的多线程设定固定容量线程池动态设定容量线程池固定线程池和动态线程池的选择 简单总结借鉴及引用…...

YOLO V3 SPP ultralytics 第二节:根据yolo的数据集,生成准备文件和yolo的配置文件

目录 1. 介绍 2. 完整代码 3. 代码讲解 3.1 生成 my_train_data.txt和my_val_data.txt 3.2 生成 my_data.data 文件 3.3 生成 my_yolov3.cfg 3.4 关于my_data_label.names文件 1. 介绍 根据 第一节 的操作,已经生成了下图中圆圈中的部分,而本…...

camunda流程引擎connector如何使用

在 Camunda 中,Connector 是一种用于与外部系统或服务交互的机制。它允许 BPMN 模型中的 Service Task 节点与外部系统或服务进行通信,从而使流程更加灵活和可扩展。使用 Connector,可以将业务流程与外部系统集成在一起,而无需编写…...

ECO基本概念:pre-mask eco gen patch flow

使用conformal LEC 进行pre-mask eco 时,如何产生patch,参考以下步骤: 官方推荐 Flattened ECO Flow(FEF) Conformal支持Flattened ECO Flow和Hierarchical ECO Flow。Flattened下,工具会将 ECO 分析重点…...

【初学人工智能原理】【4】梯度下降和反向传播:能改(下)

前言 本文教程均来自b站【小白也能听懂的人工智能原理】,感兴趣的可自行到b站观看。 本文【原文】章节来自课程的对白,由于缺少图片可能无法理解,故放到了最后,建议直接看代码(代码放到了前面)。 代码实…...

微信小程序路由传参

微信小程序路由传参 在微信小程序中,可以通过路由传参将数据传递给目标页面。以下是一种常见的方式: 在源页面中,使用 wx.navigateTo 或 wx.redirectTo 方法跳转到目标页面,并通过 URL 参数传递数据。示例: wx.navi…...

深入篇【C++】类与对象:再谈构造函数之初始化列表与explicit关键字

深入篇【C】类与对象&#xff1a;再谈构造函数之初始化列表与explicit关键字 Ⅰ.再谈构造函数①.构造函数体赋值②.初始化列表赋值【<特性分析>】1.至多性2.特殊成员必在性3.必走性&#xff1a;定义位置4.一致性5.不足性 Ⅱ.explicit关键字①.隐式类型转化②.作用 Ⅰ.再谈…...

广东棒球发展建设·棒球1号位

一、概述 棒球是一项源于美国的运动&#xff0c;自20世纪初开始传入中国&#xff0c;近年来在广东省的发展也逐渐受到关注。本文将就广东棒球的发展现状及未来发展方向进行分析。 二、发展现状 目前广东省内棒球赛事主要有以下几种&#xff1a; 1. 业余棒球联赛&#xff1a;…...

浅谈PMO对组织战略的支持︱美团骑行事业部项目管理中心负责人边国华

美团骑行事业部项目管理中心负责人边国华先生受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾&#xff0c;演讲议题&#xff1a;浅谈PMO对组织战略的支持。大会将于6月17-18日在北京举办&#xff0c;更多内容请浏览会议日程 议题内容简要&#xff1a; 战略是组织运行的…...

互联网医院资质代办|互联网医院牌照的申请流程

随着互联网技术的不断发展&#xff0c;互联网医疗已经逐渐成为人们关注的热点话题。而互联网医院作为互联网医疗的一种重要形式&#xff0c;也越来越受到社会各界的关注。若想开展互联网医院业务&#xff0c;则需要具备互联网医院牌照。那么互联网医院牌照的申请流程和需要的资…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

GO协程(Goroutine)问题总结

在使用Go语言来编写代码时&#xff0c;遇到的一些问题总结一下 [参考文档]&#xff1a;https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现&#xff1a; 今天在看到这个教程的时候&#xff0c;在自己的电…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分&#xff1a; 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...

jdbc查询mysql数据库时,出现id顺序错误的情况

我在repository中的查询语句如下所示&#xff0c;即传入一个List<intager>的数据&#xff0c;返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致&#xff0c;会导致返回的id是从小到大排列的&#xff0c;但我不希望这样。 Query("SELECT NEW com…...

02.运算符

目录 什么是运算符 算术运算符 1.基本四则运算符 2.增量运算符 3.自增/自减运算符 关系运算符 逻辑运算符 &&&#xff1a;逻辑与 ||&#xff1a;逻辑或 &#xff01;&#xff1a;逻辑非 短路求值 位运算符 按位与&&#xff1a; 按位或 | 按位取反~ …...

计算机系统结构复习-名词解释2

1.定向&#xff1a;在某条指令产生计算结果之前&#xff0c;其他指令并不真正立即需要该计算结果&#xff0c;如果能够将该计算结果从其产生的地方直接送到其他指令中需要它的地方&#xff0c;那么就可以避免停顿。 2.多级存储层次&#xff1a;由若干个采用不同实现技术的存储…...