The real answer, if any, can only be provided by the original language developers (John Ousterhout), I think. Thus, the rest is open to thought or (educated) guesswork. There is some story about TCL available here , but with a quick read there is no direct answer.
Why doesn't Tcl set variables with "$", but do I need "$" to access the variable?
My trick would be to get it closer to the shell languages ββ(UNIX). TCL was conceived in Berkeley, perhaps in a strong UNIX environment (or BSD for that matter).
UNIX shells also do not use the $ sign (or the equivalent for the corresponding shell) when declaring or assigning variables, but they require it when referenced:
Even the wicked Windows processor CMD.EXE uses a comparable method (although, I think, this is not what TCL designers thought about;)
REM DOS COMMAND.COM / Windows CMD.EXE set foo=foo echo The value of the variable is %foo%.
In addition, "string values" (although shells are known to be weakly typed) usually do not require quotation marks if there are spaces in the string values.
Yes, I could always set foo "foo", but not set $ foo foo more sequential?
Well, this is not for TCL designers / creators; -)
EDIT I almost forgot: in TCL you could do the following:
set foo bar set $foo something puts $bar
It really outputs "something." The second line actually sets the string "something" to the value of the variable "foo", thereby setting the variable named "bar" and assigning it the value "something".