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

航管二次雷達(dá)發(fā)射射頻組件功能測試儀的設(shè)計(jì)
二次諧波產(chǎn)生的原因
一次電源與二次電源有什么不同
電氣二次設(shè)備的類別和功能介紹
二次電池分類以及應(yīng)用場景詳解

電流互感器二次側(cè)電流是多少
高頻變運(yùn)行時(shí)二次電壓高是什么原因
電流互感器的二次額定電流定義、選擇原則及計(jì)算方法
深度解析電氣二次回路設(shè)計(jì)

二次諧波和三次諧波區(qū)別 二次諧波危害沒有三次諧波大?
電流互感器二次側(cè)為什么不能開路

評論