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

淺談藍牙模塊貼片加工中的二次回流焊接
什么是集成電路新建項目機電二次配?

SOLIDWORKS二次開發(fā)應(yīng)用范圍與實例
二次諧波產(chǎn)生的原因
一次電源與二次電源有什么不同
電氣二次設(shè)備的類別和功能介紹
二次電池分類以及應(yīng)用場景詳解

Li-ion/Polymer二次電池的應(yīng)用方案

電流互感器二次側(cè)電流是多少
產(chǎn)品中心 二次互感器的規(guī)格選型

評論