Реальный ответ, если таковой имеется, могли дать только дизайнеры оригинального языка (Джон Оустерхаут), я думаю.Таким образом, все остальное открыто для спекуляций или (образованных) догадок.Есть некоторая история по TCL здесь , но при быстром чтении там нет прямого ответа.
Почему Tcl не устанавливает переменные с помощью "$", ноВам нужен "$" для доступа к переменной?
Мое предположение заключается в том, что таким образом он будет ближе к языкам оболочки (UNIX).TCL был задуман в Беркли, возможно, в сильной среде UNIX (или BSD в этом отношении).
Оболочки UNIX также не используют знак $ (или эквивалент для соответствующей оболочки) при объявлении или назначении переменных, нотребовать его при обращении к нему:
# bourn shell like shells (sh, bash, ksh, ...)
foo=foo
echo "The value of the variable foo is $foo."
Даже нечестивый процессор Windows CMD.EXE использует сопоставимый метод (хотя я предполагаю , что не было тем, что имели в виду дизайнеры TCL; -)
REM DOS COMMAND.COM / Windows CMD.EXE
set foo=foo
echo The value of the variable is %foo%.
Кроме того, «строковые значения» (хотя общеизвестно, что оболочки имеют общеизвестно слабый тип) обычно не требуют кавычек, если в строковом значении теперь есть пробелы.
Да, явсегда можно было бы установить foo "foo", но разве не установить $ foo foo более последовательным?
Ну, это не для дизайнеров / создателей TCL; -)
РЕДАКТИРОВАТЬ Я почти забыл: на самом деле вы могли бы сделать следующее в TCL:
set foo bar
set $foo something
puts $bar
Это фактически выведет "что-то".Вторая строка фактически устанавливает строку «что-то» в значение переменной «foo», таким образом устанавливая переменную с именем «bar» и присваивая ей значение «что-то».