Символ "
является специальным только для синтаксического анализатора Tcl в начале слова (или в конце слова, которое было начато "
, конечно).На самом деле, если бы вы вставили пробелы, вы бы получили ошибку:
% set foo("b a r") 2
wrong # args: should be "set varName ?newValue?"
В случае, когда вы делаете вызовы string length
, "
- это в начале слова, поэтому оно особенное.Если мы добавим дополнительный ведущий символ нежелательной почты, мы увидим, что особенность "
исчезает:
% string length x"bar"
6
Если вы делаете что-то сложное с индексами массива, я думаю, что обычно проще ввести имяэлемента в самой переменной, с тех пор становится понятнее, что происходит (и, как правило, легче отлаживать):
set idx "bar"
set foo($idx) 12