02-Tcl输出、赋值与替换
2 Tcl输出、赋值与替换
2.1 puts
Tcl的输出命令是puts,将字符串标准输出channelled。语法中两个问号之间的参数为可选参数。
# 例1
puts hello
# 输出
hello
# 例2
puts -nonewline "hello hello"
# 输出
hello hello
- 如果输出一段有空格的文本,则要用双引号("")或花括号({})起来。
- -nonewwhile选项告诉puts不输出回车换行。
注意:双引号和花括号的作用是将多个词组织成一个变元,但是""和{}是由区别的。""在进行替换操作的时候,前者允许替换操作发生;{}会阻止替换。
2.2 set
set varName [value]
unset vaName
- set:变量定义和赋值命令,不必制定变量值得类型,因为变量值得类型只有一种--字符串。在为变量进行赋值的时候,会为变量开辟一段内存空间来存储变量值
- set VarName不跟变量的值,如果变量已经定义,则返回变量的值,效果和puts相同;变量不存在会返回错误信息。相当于查询的作用。
- unset与set的作用相反,它取消变量的定义,并释放变量所占的内存空间
- 通过前置的“$”符,可以引用变量的值(替换)。
set a Hello # 定义变量a并为其赋值
puts $a # a=Hello
set a "Test Tcl" # 重新给a赋值
set a # 输出Test Tcl
puts a # 输出字符a
set b $a # 定义变量b,并将a的值赋值给b b=Test Tcl
puts $b # b = Test Tcl
unset a # 释放变量
puts $a # 试图输出未定义的变量值,会进行输出
- puts $a由两步完成:首先用a的值替换$a,替换后的命令变为puts {Test Tcl},然后输出字符串。也就是说先替换后输出。
- 数组定义在后面进行介绍。
2.3 替换
2.3.1 $
$实现引用替换,用来引用参数值。
tcl在使用$进行引用替换的时候,只会进行一次解释,嵌套使用$$xxxx,只有一个起作用。
set foo oo
set dollar foo
set x $$dollar # x = $foo
set y {$foo} # y = $foo {}阻止替换
set z $x # z = $foo
- $$dollar,将$dollar用dollar的值foo进行替换,前面的$不起作用,作用字符输出。
2.3.2 []
方括号[]书写完整的命令替换,[]中的执行后,返回结果。
set b [set a 5] # set a 5命令输出的结果赋值给b b=5
puts b # b = 5
set c [expr 5*10] # 将乘式的结果赋值给c
puts c # c = 50
2.3.3 ""和{}
""和{}将多个单词阻止在一起组成一个参数,也是一种替换操作。一般在""内进行正常替换,在{}中的替换可能被阻止。当{}用于组织算数表达式、if条件和函数内执行体的代码块的时候,不会阻止替换。
set s hello
puts stdout "The length of\"$s\" is [string length $s]"
=>The length of hello is 5
# ""内再使用双引号的时候要使用转义字符。
# string length $s 计算字符串s的字符串长度
puts stdout {The length of $s is [string length $s]} # 替换操作被阻止
=>The length of $s is [string length $s]
set x 10
set y 20
set z [expr{$x + $y}]
=>30
if{$x == 10} {puts "x = $x"}
=>x=10
- expr表示进行数学运算,要用[]括起来
- 用{}来组织算数运算表达式,不阻止$替换操作
- 在条件语句中,用{}来界定条件体和执行体,不阻止内部的替换
2.3.4 \
反斜杠“\”的作用是引用特殊字符或者续行。
应用特殊字符的操作是告诉TCl解释器需要使用一些特殊的字符,如$符或者完成特定功能比如\n,\t,\b.....,相当于转义字符的作用。
如果一条语句过长,可以使用“\”,将一行语句分为多行进行书写。
set x 100
set y $x # y = 100
set z "\$x" # z = $x \$表示告诉tcl使用$符号
puts "he \nllo" # \n换行
=>he
llo
puts "\a" # 振铃
set b [puts \
$y]
注意:当用set命令为参数,赋值,并""用作续行符的时候,不要在反斜杠后面同一行上输入任何符号,包括空格和制表符。否则反斜杠(\)就起不到续行的功能,容易引起错误。
02-Tcl输出、赋值与替换的更多相关文章
- grep查询文本:问一个简单shell问题,将grep的输出赋值给一个变量
问一个简单shell问题,将grep的输出赋值给一个变量 用grep命令得到的输出赋值给一个变量不成功. grep命令如下: 代码: $ grep -c '^abc' file.txt 输出为22,表 ...
- JavaScript---Dom树详解,节点查找方式(直接(id,class,tag),间接(父子,兄弟)),节点操作(增删改查,赋值节点,替换节点,),节点属性操作(增删改查),节点文本的操作(增删改查),事件
JavaScript---Dom树详解,节点查找方式(直接(id,class,tag),间接(父子,兄弟)),节点操作(增删改查,赋值节点,替换节点,),节点属性操作(增删改查),节点文本的操作(增删 ...
- thinkphp 视图(二)变量输出、赋值和替换
view下的html文件会编译成php文件 编译的文件在runtime 下的temp目录 <p>{$email}</p> 会编译成 <?php echo $email; ...
- 简单解说Linux命令输出与命令替换
Linux命令能提高更方便的使用性能.下面就这就来讲术Linux命令.将一个程序或Linux命令的输出作为另一个程序或命令的输入,有两种方法,一种是通过一个临时文件将两个命令或程序结合在一起,例如上个 ...
- Shell总结02-shell变量、赋值与替换
变量 shell并不区分变量的类型,或者说变量都是弱类型的,本质上都是字符串,但是如果变量值中只含有数字,shell还是支持对其进行算术运算 赋值 常见的赋值操作符有=(在其前后没有空白符)和let ...
- tp5 配置 // 视图输出字符串内容替换 'view_replace_str' 的原理
- thinkphp 模板变量输出替换和赋值
一.变量输出的几个方法 <?php namespace app\index\controller; use http\Params; use think\Config; use think\Co ...
- Linux终端中的字符串使用总结(截取,切片,查找替换,转换,变量赋值等)
1.基于模式匹配截取字符串 1.#.##号截取 #号截取,从左边开始,以一个出现的分隔符(最左)为准,删除左边字符. ##号截取,从左边开始,以最后(最右)一个分隔符为准,删除左边字符. str='h ...
- TCL语言笔记:TCL基础语法
一.什么是TCL Tcl 全称是 Tool command Language.它是一个基于字符串的命令语言,基础结构和语法非常简单,易于学习和掌握. Tcl 语言是一个解释性语言,所谓解释性是指不象其 ...
- Shell教程4-Shell替换
如果表达式中包含特殊字符,Shell 将会进行替换.例如,在双引号中使用变量就是一种替换,转义字符也是一种替换. 举个例子: 复制纯文本新窗口 #!/bin/bash a=10 echo -e & ...
随机推荐
- 齐博x1APP要实现直播的关键两步
大家务必要注意,缺少这两步,你的APP将不能实现直播, 也即点击直播按钮无法启动直播推流 https://www.maxdo.tech/
- Go | 基本数据类型详解
前言 基本数据类型,变量存的就是值,也叫值类型.每一种数据都定义了明确的数据类型,在内存中分配了不同大小的内存空间. Printf 和 Println 的区别 printf 输出后不换行, print ...
- nrf9160做modem——测试连接阿里云
简介:在前面有讲过如何使用nrf9160去连接一个云,然后进行发布订阅信息,但是当时连接的是一个免费的测试云,在国内的话许多人想要连接阿里云或者华为云,下面就来测试一下连接阿里云.这里为什么要和上一篇 ...
- 微信支付v3接口的 官方 Java SDK
啰嗦几句:微信支付v3版接口麻烦吗?在对接微信支付v3接口时,本来是一件很简单的事情,其实微信支付v3接口并不是很复杂,但是微信团队的管理很混乱,给我们开发者带来了巨大的麻烦. 微信支付v3版接口对接 ...
- Django系列---开发二
django.contrib.auth Django的用户验证框架,可以快速实现用户信息验证.登录.登出等用户操作 from django.contrib.auth import authentica ...
- 从 QFramework 重新开始
自从上一篇博文写完后,就进入了繁忙工作状态,直到最近才开始有一点空闲时间. 这次繁忙的状态从 2022 年 10 月 11 日 持续到 2022 年 11 月 5 日. 主要的工作就是 QFramew ...
- Java安全之Resin2内存马
Java安全之Resin2内存马 环境 resin2.1.17 添加Filter分析 依然是web.xml注册一个filter,debug进去看注册流程 debug dofilter逻辑时看到如下代码 ...
- spring运行报500 bean不存在
spring运行报500 bean不存在 bean不存在 步骤: 查看bean是否注入成功 junit单元测试 问题,不一定在我们底层,是spring出现了问题 SpringMVC整合 ...
- X活手环的表盘自定义修改
文章用到的所有工具及软件成品 前言 前几天我在某宝买了一个智能手环,无奈软件中的表盘太少,所有我想着修改一下app中的资源文件. 反编译APK 这里反编译APK用apktool工具就可以. apkto ...
- Oracle 插入时间戳id函数func_getnewid()
在Oracle数据库中出入以时间戳为id的最简单方法运用func_getnewid()函数: select func_getnewid(30) from dual; id长度可调