As you should expect, there's a reason: distinguishing variables of the script from names within the JSON document and from numerous keywords and builtin stuff. Variables get a sigil because in normal code they are a minority of the names.
Yup. Same with shells. Sigils on variables are so we don't need to quote every argument/option on every command. And we don't want to quote our strings in the shell because different to other programming languages, shells are for interactive use and so string literals are far more frequent than variables.
What's wrong with dollar signs for variable names?
We the Europeans feel discriminated. We'd like to see variable names with € or £.
let €gdpr = 42;
let £colour = #B0B;
There, this is more compelling, isn't it?
That's why
let ¤whatever = 123;
was invented instead.
I'd argue it's not dollar signs for variable names but dollar signs in variable names.