having to upgrade varnish isn't helping with the anger issues.

I AM NOW FULL OF RAGE.

AM NOW DEBUGGING SYSTEMD, AND HAVING TO LEARN THE INTERNALS.

ALL OF THE RAGE

not kidding, we fixed it with:

EnvironmentFile=-/etc/default/varnish
ExecStart=/bin/bash -c "/bin/echo ${DAEMON_OPTS} && /usr/sbin/varnishd ${DAEMON_OPTS}"

Because otherwise systemd would randomly eat parts of ${DAEMON_OPTS}. oh yes, we *also* had to make DAEMON_OPTS a single line, because *something* didn't like '\' continuation chars.

systemd is the worst software I've ever had to use, and I've used AIX, HP-UX, Solaris, and 16-bit Windows Payroll software.

STILL FULL OF RAGE

systemd parses and interprets ${VARIABLE} different than shells do.

in every shell that has ever existed, ${VARIABLE} ensures that only VARIABLE is expanded, even if VAR also exists.

systemd instead passes the entirety of VARIABLE as a single argument.

so argv and argc were wrong

ARGV AND ARGC WERE FUCKING WRONG!

@phessler Do you mean it behaves exactly as written in the doc and illustrated by an example ?

--------------------------8<--------------------------
Example:

Environment="ONE=one" 'TWO=two two'
ExecStart=/bin/echo $ONE $TWO ${TWO}

This will execute /bin/echo with four arguments: "one", "two", "two", and "two two".
--------------------------8<--------------------------

https://www.freedesktop.org/software/systemd/man/systemd.service.html

@smortex yes. That is 100% broken. Should never have existed like that.
@phessler remember that there is no shell there to guess which arguments should be split at spaces and which should not (as you would do using quotes with a shell)… A syntax that allows you to split or not split during variables expansion definitively makes sense IMHO.

@smortex it already supports single and double quotes! And they work exactly the way it does in shell.

You can even embed the single quotes in the variable, as you can see just 5 lines below your example.

It's broken, it's flawed, and it is absolutely wrong.