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输出、赋值与替换的更多相关文章

  1. grep查询文本:问一个简单shell问题,将grep的输出赋值给一个变量

    问一个简单shell问题,将grep的输出赋值给一个变量 用grep命令得到的输出赋值给一个变量不成功. grep命令如下: 代码: $ grep -c '^abc' file.txt 输出为22,表 ...

  2. JavaScript---Dom树详解,节点查找方式(直接(id,class,tag),间接(父子,兄弟)),节点操作(增删改查,赋值节点,替换节点,),节点属性操作(增删改查),节点文本的操作(增删改查),事件

    JavaScript---Dom树详解,节点查找方式(直接(id,class,tag),间接(父子,兄弟)),节点操作(增删改查,赋值节点,替换节点,),节点属性操作(增删改查),节点文本的操作(增删 ...

  3. thinkphp 视图(二)变量输出、赋值和替换

    view下的html文件会编译成php文件 编译的文件在runtime 下的temp目录 <p>{$email}</p> 会编译成 <?php echo $email; ...

  4. 简单解说Linux命令输出与命令替换

    Linux命令能提高更方便的使用性能.下面就这就来讲术Linux命令.将一个程序或Linux命令的输出作为另一个程序或命令的输入,有两种方法,一种是通过一个临时文件将两个命令或程序结合在一起,例如上个 ...

  5. Shell总结02-shell变量、赋值与替换

    变量 shell并不区分变量的类型,或者说变量都是弱类型的,本质上都是字符串,但是如果变量值中只含有数字,shell还是支持对其进行算术运算 赋值 常见的赋值操作符有=(在其前后没有空白符)和let ...

  6. tp5 配置 // 视图输出字符串内容替换 'view_replace_str' 的原理

  7. thinkphp 模板变量输出替换和赋值

    一.变量输出的几个方法 <?php namespace app\index\controller; use http\Params; use think\Config; use think\Co ...

  8. Linux终端中的字符串使用总结(截取,切片,查找替换,转换,变量赋值等)

    1.基于模式匹配截取字符串 1.#.##号截取 #号截取,从左边开始,以一个出现的分隔符(最左)为准,删除左边字符. ##号截取,从左边开始,以最后(最右)一个分隔符为准,删除左边字符. str='h ...

  9. TCL语言笔记:TCL基础语法

    一.什么是TCL Tcl 全称是 Tool command Language.它是一个基于字符串的命令语言,基础结构和语法非常简单,易于学习和掌握. Tcl 语言是一个解释性语言,所谓解释性是指不象其 ...

  10. Shell教程4-Shell替换

    如果表达式中包含特殊字符,Shell 将会进行替换.例如,在双引号中使用变量就是一种替换,转义字符也是一种替换. 举个例子: 复制纯文本新窗口   #!/bin/bash a=10 echo -e & ...

随机推荐

  1. 齐博x1如何取消某个标签的缓存时间

    标签默认会有缓存, 如果你要强制取消缓存时间的话, 可以加上下面的参数 time="-1"如下图所示 标签默认缓存时间是10分钟, 你也可以改成其它时间 比如 time=" ...

  2. markdown第一天学习

    Markdown学习 标题: 空格+标题名字后回车 二级标题 空格+标题名字后回车 三级标题 空格+标题名字后回车 四级标题 空格+标题名字后回车 字体 粗体 hello,world!------两边 ...

  3. 基于LZO的高性能无损数据压缩IP

    LZOAccel-C LZO Data Compression Core/无损数据压缩IP Core LZOAccel-C是一个无损数据压缩引擎的FPGA硬件实现,兼容LZO 2.10标准. Core ...

  4. 小程序利用canvas 绘制图案 (生成海报, 生成有特色的头像)

    小程序利用canvas 绘制图案 (生成海报, 生成有特色的头像) 微信小程序生成特色头像,海报等是比较常见的.下面我来介绍下实现该类小程序的过程. 首先选择前端来通过 canvas 绘制.这样比较节 ...

  5. 状态机的技术选型,yyds!

    前言 今天跟大家分享一个关于"状态机"的话题.状态属性在我们的现实生活中无处不在.比如电商场景会有一系列的订单状态(待支付.待发货.已发货.超时.关闭):员工提交请假申请会有申请状 ...

  6. Ajax基础(中)

    这节主要在上节的基础上学会如何使用Ajax 源码下载: 链接:https://pan.baidu.com/s/1kG-vACFxneAZqONdo97XrQ 提取码:k21y 在WebStorm中打开 ...

  7. 定制ASP.NET Core的身份认证

    大家好,我是张飞洪,感谢您的阅读,我会不定期和你分享学习心得,希望我的文章能成为你成长路上的垫脚石,让我们一起精进. 在本章,我们将学习如何定制ASP.NET Core认证机制.微软把安全认证当做AS ...

  8. 高精度加法(Java)

    题目描述 高精度加法,相当于 a+b problem,不用考虑负数. 输入格式 分两行输入. a , b ≤ 10^500 输出格式 输出只有一行,代表 a + b  的值. 思路 使用数组进行模拟, ...

  9. 2022春每日一题:Day 22

    题目:[HAOI2008]糖果传递 光看题几乎没有思路,但是显然到最后每个人手中一定有 d=s/n个糖果(s为所有人糖果总和),不妨设2号给1号x2个糖果,3号给2号x3个.....1号给n号x1个, ...

  10. c++ 三种继承

    继承优先级:private>protect>public ​ 变量或函数函数本身的类型和继承方式,比较,取小的就是继承的访问性 ​ eg: protected x,通过private继承, ...