From The Open Group:
These strings have the form
name=value; names shall not contain
the character ‘=’. For values to be
portable across systems conforming to
IEEE Std 1003.1-2001, the value shall
be composed of characters from the
portable character set (except NUL
and as indicated below).
So names may contain any character except = and NUL, but:
Environment variable names used by the utilities in the Shell and
Utilities volume of IEEE Std
1003.1-2001 consist solely of uppercase letters, digits, and the ‘_’
(underscore) from the characters
defined in Portable Character Set and
do not begin with a digit. Other
characters may be permitted by an
implementation; applications shall
tolerate the presence of such names.
So while the names may be valid, your shell might not support anything besides letters, numbers, and underscores.