02-Tcl输出、赋值与替换

  • 阿里云国际版折扣https://www.yundadi.com

  • 阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

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

  • 阿里云国际版折扣https://www.yundadi.com

  • 阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6