Direct answer: bash doesn't consider CLIENT[if-modified-since] a valid variable name, so you need to use something else to get its value. Fortunately, printenv can do the job:
printenv 'CLIENT[user-agent]' >> "${LOG}"
Note that this doesn't use the ${...}; that's bash's variable syntax. Also, it's a really good idea to quote the name (either single- or double-quotes would work), since square brackets are filename wildcard characters, and using those without proper quotes can lead to weird problems.
If you want to pass the value as an argument to another command, use printenv in a command substitution:
someCommand "$(printenv 'CLIENT[user-agent]')"
Note that you should almost always double-quote variable references, command substitutions, etc. I recommend running your scripts through shellcheck, and following its recommendations to improve your scripts in this, and a variety of other ways.
Another option is to copy the value to a bash variable and use that:
CLIENT_user_agent="$(printenv 'CLIENT[user-agent]')"
someCommand "$CLIENT_user_agent"
Explanation and clarification: I'm seeing a lot of confusion in the comments and other answers about what's going on here. The source of the confusion is that in bash syntax, CLIENT[user-agent] (used in a variable-name-like context) would refer to an array named CLIENT, indexed by user-agent (which itself might be either a string or a math expression, user minus agent, depending on whether CLIENT is an associative array or numeric-indexed array).
But, at least if I understand the situation correctly, the [user-agent] is just part of the environment variable name itself. At least in Linux, environment variable names can contain pretty much any characters except "=".
bash, on the other hand, only allows letters, numbers, and underscores in names, so it cannot (directly) set or access environment variables with names containing other characters.
Also, environment variables cannot be arrays, only plain strings. Arrays are a bash (and ksh and zsh and...) thing, not something the operating system's environment supports.
[]seem to cause the problem. Do you really need them in the name? I don't think Bash supports arrays with a non-numeric index.declare -A CLIENTto make that an associative array, or you can, say,s/[[]]/_/on each variable name before reading it, so the shell treats everything as normal variables. Try usingdeclare -Pon your variables, especially CLIENT; it's always enlightening. Note that associative arrays are a feature of bash 4 and up.