mix(){
p=$1; shift; q=$1; shift; c=
i=1; for a; do c="$c $q \"\${$i}\""; i=$((i+1)); done
eval "${p%\%*}$c${p#*\%}"
}
mix 'tar % -zcf tmp.tar.gz' --exclude "/tmp/hello hello" "/tmp/systemd*" "/tmp/Temp*"
EXCLUDE=("/tmp/hello hello" "/tmp/systemd*" "/tmp/Temp*")
mix 'tar % -zcf tmp.tar.gz' --exclude "${EXCLUDE[@]}"
Extending the answer here.
This doesn't rely on any bashisms, it will also work fine with debian's /bin/sh, and with busybox.