02-Tcl輸出、賦值與替換

Icer_Newer發表於2023-01-16

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命令為引數,賦值,並""用作續行符的時候,不要在反斜槓後面同一行上輸入任何符號,包括空格和製表符。否則反斜槓(\)就起不到續行的功能,容易引起錯誤。

相關文章