看一個典型的例子,如下圖所示。變量x被賦值為10,變量a被賦值為字符x。之后,給變量b賦值$$a。最終變量b的值將會是$x,而不是10。
為什么b的值是$x,而不是10呢?這是因為Tcl的變量置換遵循如下兩條規則:
規則1:Tcl在解析一條命令時,只從左向右解析一次,進行一輪置換,每一個字符只會被掃描一次。
規則2:每一個字符只會發生一層置換,而不會對置換后的結果再進行一次掃描置換。
根據上述規則,Tcl從左向右對命令“set b$$a”進行解析,掃描所有的字符,發現$$a時,執行變量置換,得到$x,同時只發生一層置換,不會對置換后的結果$x再進行掃描置換(否則$$a中最左側也就是第一個$將被掃描兩次,與規則1沖突,)。因此,最左側的$并不會觸發變量置換,最終變量b的值將會是$x,而不是10。
那么如果期望$$a發生二次置換該如何操作呢?
方法1:采用[set var]的方式,如下圖所示。代碼第6行中括號中的set命令只跟隨一個參數$var,$var發生變量置換,故set $var等效于set a,而set a將返回變量a的值。本質上,$var是[set var]的縮寫版本。通過代碼第10行和第12行可以看出,set后面如果只有一個參數,而這個參數又是一個已經定義的變量名,那么該命令就直接返回該變量的變量值,與$var等價。
方法2:采用命令subst實現此目的,如下圖所示。
-
TCL
+關注
關注
10文章
1715瀏覽量
88471 -
變量
+關注
關注
0文章
613瀏覽量
28329 -
置換
+關注
關注
0文章
3瀏覽量
2017
原文標題:Tcl之$$a 80%的概率......
文章出處:【微信號:Lauren_FPGA,微信公眾號:FPGA技術驛站】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論