Two different scopes, I think. The shell environment invoked in a KM script action is not the same as that invoked by terminal.app. Slightly different shells, and they don’t automatically share environment variables.
I think you will see your variable if you run an echo command from a KM Execute Shell Script action.
(compare the output of the printenv command in both (terminal.app and KM shell action), including the values of variables like $PATH and $LANG, which are not automatically exported)
PS Peter’s update at the bottom of this thread is helpful:
In unix, the environment is passed down when you create a child process.
Something like this:
OS X starts up with process ID 1, which in OS X is /sbin/launchd. It sets up some sort of environment, including the environment variables. It then runs the loginwindow. loginwindow receives the environment passed down from launchd (possibly with changes). You then launch two applications, Keyboard Maestro and Terminal - each of these receive their environment variables from loginwindow. Keyboard Maestro launches Keyboard Maestro Engine which receives its environment from Keyboard Maestro. And Keyboard Maestro Engine runs your script, passing it the environment it has, together with all the KMVAR variables.
Terminal meanwhile has the environment passed to it from loginwindow - it knows nothing about the Keyboard Maestro variables and so when it runs a shell, that shell knows nothing about Keyboard Maestro variables.
You can retrieve the Keyboard Maestro variables via AppleScript requests to the Keyboard Maestro Engine, so you can get them from your script, but not in the form of KMVAR variables.