Btw in case you're interested, regarding this evaluation behaviour of parameters passed to a timer there is something quite interesting:

if you have a set/unset command in the timer, then the variable following it will not be evaluated (it will be with /var though) so if you do decide to pass something to a timer, then the variable that you want to set doesn't need escaping when used with set/unset.

Observe:

//.timer 1 1 set -l %a 5 $(|) set %a bla $(|) unset %a 7 $(|) var %a = lol | timers

The message displayed by the /timers command shows that all %a's did not get evaluated except for the one that was set with the /var command.

It doesnt even need to even be an actual command, as long as there is the string "set or unset" followed by optional flags and a variable, then the variable will not evaluate when the timer is set.

//.timer 1 1 echo -a hmm set %a how weird | timers

As you can also see, the pipe | doesn't necessarily need to be escaped with the level 0 of eval, just having it not be surrounded by a space is sufficient for it not to evaluate to a pipe. This doesn't work for other characters and even produces flaky results, try: //echo -a $({) VS $(}). Therefore, as a rule of thumb, I always use the universal way to escape a character being $eval(<char>,0) or shorter $(<char>,)

Additionally, instead of escaping characters with using $eval of level 0, you can of course also use their ascii representation like $chr(124) is a pipe.

Note that this behaviour of set/unset is only with /timer, not with scon/scid where double evaluation also occurs.

//scon -r set %a 7
--> will give: * /set: invalid parameters, because it evaluated the %a making the command "set -s 7" (assuming you didn't have a global variable %a in your variables list of course)

This wasn't directed at you, it's for anyone who cares.