I get that. $(( abc ..... )) ... abc isn't a number therefore it's the name of a variable. However I did:
That's not qutie what's happening. Arithmetic expressions interpret all variables as numbers, whether the variables are declared as integers or not. If a variable's value doesn't look like a number, it is interpreted as the name of another variable, which is then looked up recursively. If it gets to a variable that doesn't exist, the value is taken as 0.
Right, I get that too. A string of digits is still a string.
... it will be converted back to a string that just happens to be all digits. What's the difference? Well, let's continue your example:
zsh% var=abc; let var+=2; echo $var2zsh% var+=2; echo $var # note: no let22