Eu nunca encontrei um shell estilo Bourne que permitisse - em um nome de variável. Somente letras ASCII (de qualquer um dos casos), _ e dígitos são suportados e o primeiro caractere não deve ser um dígito.
Se você tiver um programa que requer uma variável de ambiente que não corresponda às restrições do shell, inicie-o com o programa env .
env 'strange-name=some value' myprogram
Observe que alguns shells (por exemplo, traço moderno , mksh, zsh) remova as variáveis cujo nome elas não gostam do ambiente. ( Shellshock fez com que as pessoas fossem mais cautelosas com relação aos nomes das variáveis de ambiente, portanto as restrições provavelmente se tornarão mais rigorosas com o tempo Portanto, se você precisar passar uma variável cujo nome contenha um caractere especial para um programa, passe-a diretamente, sem um shell intermediário ( env 'strange-name=some value' sh -c'…; myprogram' pode ou não funcionar).