TCL基础知识入门(一)

这篇具有很好参考价值的文章主要介绍了TCL基础知识入门(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

TCL基础

学习Tcl的笔记,一些基础概念。

TCL 开发环境安装配置

TCL工具是vivado 自带的 vivado TCL shell; 
打开方式:vivado -> window -> tcl console 
 
vivado 出了名的难用,又改为vscode编辑了,使用Activestate开发工具
官网位置:https://www.activestate.com/products/tcl/
或者使用我已经下载好的win10安装包
链接:https://pan.baidu.com/s/1sP_692OIcgeHDa5oDsjOfw?pwd=aobo 
提取码:aobo

之后根据https://zhuanlan.zhihu.com/p/492866535这篇文章用vscode配置TCL开发环境
注:采用wish后vscode并不能成功运行,最后选用tclsh配置

vscode运行TCL效果
TCL基础知识入门(一)

认识

1. TCL

TCL(tool command language) 是一种脚本语言,基于字符串的命令语言,解释性语言。(shell 一样)

1. 所有结构都是一条命令,包括语法结构
2. 所有数据类型都可视为字符串
(一切皆为字符串)

2. 命令语句

一条脚本由一个或几个单词构成,空格、Tab键隔开。 第一个单词为命令名,后面为参数
命令可以换行或者**;**隔开, 分号会促使左侧命令不显示输出结果。

set x 5
5
set x 5 ; set y 6
6
set x 5 ; set y 6;
6

3. 变量赋值

变量赋值需要使用set 变量名 变量值 ; C语言变量名有限制(字母、下划线),TCL没有任何限制,甚至可以是空格; 保持良好的代码风格,TCL区分大小写。
incr 变量名 (参数)不加参数,执行第一个参数+1 的操作 ,有参数与第一个参数相加,初始化为0, 第一个第二个参数都必须为整形。

set " " tcl
tcl
incr v    # initial  V = 0 
1         #  v + 1 
incr v 2  # V + 2
3
incr v 1.5   # int 
expected integer but got "1.5"
incr v
4
incr -2
1
incr v -2  # 4-2
2

put $errorInfo
expected integer but got "1.5"
    (reading increment)
    invoked from within
"incr v 1.5"
命令分为两块: 解析 和 执行
解析: 将命令分解为一个个独立的单词, 进行必要的substitution置换。
执行: 将第一个单词作为命令,去查找是否有定义,将后续参数传递进去。
errorInfo : 错误信息存储在全局变量errorInfo 中

unset命令与 set命令功能相反, 取消变量定义并释放变量所占用的内存空间。
info exists命令判断变量是否被定义,存在则返回1,未定义返回0。取消未定义变量会报错。
info 命令主要查看TCL解释器的相关信息。~ tclversion 返回解释器版本信息,~ hostname 返回主机名。

4. 变量置换

有点类似于C语言的指针。
- . 会被解释器当做字符串分隔符;_则不会。 对于含有分割符的变量需要用{ }解释器才当做一个整体。

set x 5
set y x  # 将字符x赋给y,x是字符不是变量
set z $x # 将变量的值赋值给z 

set a-b-c hello
hello
set str $a-b-c
can't read "a": no such variable
set str ${a-b-c}
hello
set a_b 4
4
set y $a_b
4
set c $a_b${a-b-c}
4hello
set c ${a_b}_${a-b-c}
4_hello
set c ${a_b}7
47
set c $a_b7
can't read "a_b7": no such variable
append a_b $a_b
44

借助$ 可以完成字符拼接,命令append具有相同功能;
append + 变量名 + 新添加的字符串
嵌套置换$$a 不行 TCL在同一层次下遇到变量替换符只会置换一次;解释器从第一个$起开始算起到非法字符(字母、数字、下划线之外)为止为变量名

set a 5
=>  5

put $$a
=>  $5

subst $$a
=> can't read "5": no such variable

subst $$var
=>  5

5. 命令置换

第二种置换形式:命令置换 [ ], [ ]中是另一条独立的Tcl命令(相当于命令嵌套), [ ]中可以有多条命令(使用空格或分号隔开)

# 较复杂置换
# 一
set var1 3.14
set var2 hello 
set var3 -3
foreach num {1 2 3 } { 
    puts "var$num = [set var$num]"
}

=> var1 = 3.14
=> var2 = hello
=> var3 = -3

#二
set area [ expr {$var3 * $var3}]
# expr 命令会在解析set时执行,expr结果是set第二个参数
puts "area : [expr {$var3 * $var3} ]"

=> area : 9

#命令置换的嵌套
# string length 返回字符串长度
set len [expr { [string length $var2] + [string length $var3]}]
puts "len : $len"

=> len : 7

6. 反斜线置换

字符串中含有非法字符时[ 、空格、$、\ 等时编译器会当做命令字符处理,导致报错。添加\后可以被正确解释。

set str reg[x]
=> invalid command name "x"

set str reg\[x]
puts $str
=> reg[x]
1. TCl 在解析一条命令时只进行一次解析、一轮置换。(一条命令不是一行,  [ ] 里面是一条命令);
2. TCL每个字符只发生一层置换。

7. “” 和{ }

双引号和花括号内的字符被当做一个整体,包括特殊字符。
双引号内的置换命令可以正常使用
花括号内的置换会被阻止,但当作为if等语句的界限符时不会

8. 注释与续行

#注释符必须位于命令的第一个字符,语句之后会报错。
注释语句中出现\注释语句会换行,但\后不能跟任何字符(包括空格)。
大段代码块注释:文章来源地址https://www.toymoban.com/news/detail-438145.html

# 第一种 if {0}
if {0} {
        } 
        
# 第二种  {}
set commented_out {
	XXXX
	}
	
#第三种 proc过程
proc commented_out {} {
# proc 函数 后面没有参数输入,且后续脚本中没有被调用,从而达到注释目的
	}

到了这里,关于TCL基础知识入门(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Vue2简单使用及相关基础知识概念(适合小白入门,看完就能上手)

    Vue2简单使用及相关基础知识概念(适合小白入门,看完就能上手)

    MVC模式(同步通信为主):Model、View、Controller MVP模式(异步通信为主):Model、View、Presenter MVVM模式(异步通信为主):Model、View、ViewModel(目前主要的模式) 2.1 概念 MVVM是一种软件架构设计模式。MVVM的核心是ViewModel层,负责转换Model层中的数据对象来让数据变得更加容易

    2024年02月07日
    浏览(7)
  • Web安全入门基础知识(笔记)

    Web安全入门基础知识(笔记)

    0x01 基础名词 一、域名 1.什么是域名 2.域名在那里注册 3.什么是二级域名,多级域名,顶级域名 4.域名发现对于安全测试的意义 二、DNS 1.什么是DNS 2.本地host和DNS的关系 3.CDN是什么,和DNS有什么关系 三、常见的DNS攻击 四、脚本语言 1.常见的脚本语言有哪些 2.不同的脚本类型于

    2024年02月10日
    浏览(14)
  • 入门必看——渗透测试基础知识笔记

    sql 注入攻击是通过将恶意的 sql 查询或添加语句插入到应用的输入参数中,再在后台 sql 服务器上解析 执行进行的攻击 头部注入(ua,cookie,referer) 联合注入 报错注入 布尔盲注 时间盲注 堆叠注入宽字节注入 布尔盲注:根据注入信息返回true or fales 没有任何报错信息 时间盲

    2024年02月14日
    浏览(8)
  • 深度学习基础知识笔记

    深度学习基础知识笔记

    怎么样提特征 (1)无人驾驶, 计算机视觉 (2)人脸识别 移动端-计算量太大,速度慢,卡。 参数:成千上百万的。 (3)医学 (4)变脸 (5)图像自动上色 有监督的问题, 1 分类: 挑战:照射角度,形状改变,部分遮挡,背景混入 套路:收集数据给定标签,训练分类器

    2024年02月13日
    浏览(17)
  • (学习笔记)TCP基础知识

    (学习笔记)TCP基础知识

    TCP 是 面向连接的、可靠的、基于字节流 的传输层通信协议。 面向连接:一定是[一对一]才能连接,不能像UDP协议可以一个主机同时向多个主机发送消息,也就是一对多是无法做到的; 可靠的:无论网络链路中出现了怎样的链路变化,TCP都可以保证一个报文一定能够到达接收

    2024年02月16日
    浏览(15)
  • 【TypeScript】基础知识学习笔记

    TypeScript的特点: JavaScript的超集,满足所有的JS语法 含有面向对象的静态类型 起步安装:1、npm i typescript -g 2、tsc 文件名 一、TS的基本数据类型 基本数据类型:number、boolean、string、undefined、null、symbol、bigint、void 当中的类型有大小写的区分:大写的类型是给对象使用,小写

    2024年02月09日
    浏览(24)
  • 模电基础知识学习笔记

    模电基础知识学习笔记

    文章目录: 一:基本元器件介绍  1.二极管 1.1 普通二极管特性测试  1.2 稳压二极管测试 1.3 整流二极管 1.4 开关二极管 2.电容 3.三极管(电流控制) 3.1 介绍  3.2 类型(PNP、NPN)  3.3 三种工作状态:放大状态、截止状态、饱和状态 4.场效应管(电压控制) 4.1 介绍  4.2 类型(耗尽

    2024年02月15日
    浏览(13)
  • Zookeeper学习笔记(1)—— 基础知识

    Zookeeper学习笔记(1)—— 基础知识

    Zookeeper 是一个开源的分布式的, 为分布式框架提供协调服务 的 Apache 项目 Zookeeper从设计模式角度来理解:是一个基于 观察者模式 设计的 分布式服务管理框架 ,它 负责存储和管理大家都关心的数据 ,然后 接受观察者的注 册 ,一旦这些数据的状态发生变化,Zookeeper就 将负

    2024年02月05日
    浏览(5)
  • (学习笔记-IP)IP基础知识

    (学习笔记-IP)IP基础知识

    IP在TCP/IP参考模型中处于第三层,也就是 网络层。 网络层的主要作用是: 实现主机与主机之间的通信,也叫点对点的通信。  网络层与数据链路层的关系: MAC的作用是实现 直连 的两个设备之间通信,而IP负责 没有直连 的两个网络之间进行通信传输  因此 计算机网络中需要

    2024年02月16日
    浏览(8)
  • Android ContentProvider基础知识学习笔记

    1、动态申请权限 2、读取手机联系人 3、创建自己的ContentProvider (1) onCreate()。初始化ContentProvider的时候调用。通常会在这里完成对数据库的创建和升级等操作,返回true表示ContentProvider初始化成功,返回false则表示失败。 (2) query()。从ContentProvider中查询数据。uri参数用于确定查

    2024年04月10日
    浏览(6)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包