Actually $ means internal Parameter/Variable (such as $DBConnection prefix or $PMSessionLogDir) whereas $$ are used for user-defined parameters or variables (which could be defined at mapping or workflow/worklet level).
You can declare and use variables and parameters starting with $$ You can override and use pre-defined parameters starting with **$PM*** (i.e. $PMSessionLogDir, $PMWorkflowLogCount) You can use without declaration parameters following predefined templates (i.e. $InputFile, $DBConnection, etc.).
I hope this all make more sense to you.