Одной из действительно интересных вещей в Tcl является то, что вы можете динамически создавать имена переменных, как вы делаете в вопросе, который вы опубликовали. Однако это усложняет написание и делает ваш код сложнее, чем необходимо для понимания.
Вместо того, чтобы пытаться выяснить, как сделать эквивалент $ {{$ t} _top}, возможно, лучше вообще избежать этой проблемы. Вы можете сделать это с помощью ассоциативного массива.
Например, вместо этого:
set t SNS
set ${t}_top [commands that return value]
...
puts [set ${t}_top]
Сделайте это:
set t SNS
set top($t) [commands that return value]
...
puts $top($t)
Большинство людей согласны с тем, что последний пример гораздо более читабелен.