9

02-Tcl输出、赋值与替换 - Icer_Newer

 1 year ago
source link: https://www.cnblogs.com/Icer-newer/p/17055184.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

2 Tcl输出、赋值与替换

2.1 puts

Tcl的输出命令是puts,将字符串标准输出channelled。语法中两个问号之间的参数为可选参数。

highlighter- Bash
# 例1
puts hello

# 输出
hello

# 例2
puts -nonewline "hello hello"

# 输出
hello hello 
  • 如果输出一段有空格的文本,则要用双引号("")或花括号({})起来。
  • -nonewwhile选项告诉puts不输出回车换行
    注意:双引号和花括号的作用是将多个词组织成一个变元,但是""和{}是由区别的。""在进行替换操作的时候,前者允许替换操作发生;{}会阻止替换。

2.2 set

highlighter- Bash
set varName [value]
unset vaName
  • set:变量定义和赋值命令,不必制定变量值得类型,因为变量值得类型只有一种--字符串。在为变量进行赋值的时候,会为变量开辟一段内存空间来存储变量值
  • set VarName不跟变量的值,如果变量已经定义,则返回变量的值,效果和puts相同;变量不存在会返回错误信息。相当于查询的作用。
  • unset与set的作用相反,它取消变量的定义,并释放变量所占的内存空间
  • 通过前置的“$”符,可以引用变量的值(替换)。
highlighter- Bash
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,只有一个起作用。

highlighter- Bash
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 []

方括号[]书写完整的命令替换,[]中的执行后,返回结果。

highlighter- Bash
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条件和函数内执行体的代码块的时候,不会阻止替换。

highlighter- Bash
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.....,相当于转义字符的作用。
如果一条语句过长,可以使用“\”,将一行语句分为多行进行书写。

highlighter- Bash
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命令为参数,赋值,并""用作续行符的时候,不要在反斜杠后面同一行上输入任何符号,包括空格和制表符。否则反斜杠(\)就起不到续行的功能,容易引起错误。

__EOF__


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK