TCL基础学习(一)

  • TCL基础
    • TCL 开发环境安装配置
    • 认识
      • 1. TCL
      • 2. 命令语句
      • 3. 变量赋值
      • 4. 变量置换
      • 5. 命令置换
      • 6. 反斜线置换
      • 7. “” 和{ }
      • 8. 注释与续行

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效果

认识

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
2put $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
=>  5put $$a
=>  $5subst $$a
=> can't read "5": no such variablesubst $$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. 注释与续行

#注释符必须位于命令的第一个字符,语句之后会报错。
注释语句中出现\注释语句会换行,但\后不能跟任何字符(包括空格)。
大段代码块注释:

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

TCL基础知识入门(一)相关推荐

  1. swift5.x基础知识入门

    swift5.x基础知识入门 源码在我的主页下,欢迎下载,我非常喜欢swift和oc的语法,两者相似,我坚信天下没有学不会的技术. 基本介绍 ///这里只介绍一些初学swift的基本概念,需要提前了解 ...

  2. 学习笔记:Java 并发编程①_基础知识入门

    若文章内容或图片失效,请留言反馈. 部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 视频链接:https://www.bilibili.com/video/av81461839 视频下载: ...

  3. GIS地图基础知识--入门教程

    wenzhanhttp://www.gisbbs.net/viewthread.php?tid=106&extra=page%3D1 GIS地图基础知识--入门教程 GIS 地 图 知 识 1 ...

  4. C语言基础知识入门和C语言入门基础知识大全

    一.C语言基础知识入门 C语言一出现,就以其丰富的功能.强大的表达能力.灵活性.方便性和广泛的应用,在世界范围内迅速普及和普及.C语言不仅高效而且可移植.它可以用来开发应用软件.驱动程序.操作系统等. ...

  5. JavaScript 基础知识 - 入门篇(二)

    11. 函数 11.1 函数的基础知识 为什么会有函数? 在写代码的时候,有一些常用的代码需要书写很多次,如果直接复制粘贴的话,会造成大量的代码冗余: 函数可以封装一段重复的javascript代码, ...

  6. R语言基础知识入门学习(一)

    目录 系列文章目录 一.软件下载 二.基本知识 1. 对象 2. 向量 3. 向量化 4. 因子 总结 系列文章目录 R语言基础知识入门学习(一) 一.软件下载 我们可以通过这个网址对R语言软件进行下 ...

  7. 网络安全基础知识入门!网络安全学习教程

    当我们学习网络安全的时候,需要对它的基础知识做一个简单的了解,这样对以后的学习和工作都会有很大的帮助.本篇文章为大家总结了网络安全基础知识入门的内容,快跟着小编来学习吧. 计算机网络 计算机网络是利用 ...

  8. 计算机网络建设中涉及到哪些硬件,网络基础知识入门

    网络基础知识入门 导语:随着计算机的广泛应用和网络的流行,我们应该要知道一些网络基础知识,下面是小编收集整理的网络基础入门知识,欢迎参考! 计算机网络是什么 这是首先必须解决的一个问题,绝对是核心概念 ...

  9. Python基础知识入门(二)

    Python基础知识入门(一) Python基础知识入门(三) Python基础知识入门(四) Python基础知识入门(五) 一.数字类型 Python 数字数据类型用于存储数值.数据类型是不允许改 ...

最新文章

  1. spring boot2 修改默认json解析器Jackson为fastjson
  2. CF#1288A Deadline (函数求最值问题)
  3. C#类类型“.NET技术”
  4. 蓝桥杯基础模块8_1:串口通信收发
  5. 论文阅读 - Group Normalization
  6. ruby 新建对象_Ruby中的面向对象编程
  7. 深度学习笔记(6) 实践层面(一)
  8. python中定义字典数据类型使用什么符号_python数据类型之字典类型-dict
  9. cover 在html中的作用,Cover
  10. less文件转换为css文件
  11. 在window是下安装hadoop过程
  12. 将mysql数据库批量导出为word三线表格形式
  13. Hello World · GitHub 指南
  14. word选择粘贴没有html格式,Word选择性粘贴怎么用?Word设置无格式文本粘贴快捷键的方法...
  15. 我爱淘二次冲刺阶段4
  16. [KALI系列第四章]进行ARP断网攻击,包含安装方法
  17. 最全的PHP开发Android应用程序
  18. 力扣编程题-解法汇总
  19. 【自动驾驶】Frenet坐标系与Cartesian坐标系(二)
  20. 静下心来看一看花花世界花花人.

热门文章

  1. python环境搭建心得_python第一课 基本语法搭建以及环境
  2. 滚蛋吧,正则表达式!
  3. 百度定位sdk的api使用时获取地址信息为null的原因
  4. m伪随机码的产生matlab,伪随机数的产生
  5. 树莓派3B入门使用教程
  6. iOS - 百度推送
  7. 非法集资受害人的赔偿标准是怎样的
  8. CListCtrl详细使用方法
  9. html5腾讯地图api应用
  10. JAVA WEB环境搭建教程