So, what is the purpose of allowing arbitrary name in form
env var=valueand was it allowed by POSIX?
Citações de POSIX: Variáveis de ambiente :
Environment variable names used by the utilities in the Shell and Utilities volume of POSIX.1-2008 consist solely of uppercase letters, digits, and the ( '_' ) 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.
Note: Other applications may have difficulty dealing with environment variable names that start with a digit. For this reason, use of such names is not recommended anywhere.
Portanto, implementações de env podem permitir nomes arbitrários de variáveis de ambiente - ea maioria, se não todas, implementações o fazem, aceitando todos os caracteres não-NUL à esquerda de um '=' - e implementações de outros utilitários (como o shell) pode ou não permitir nomes arbitrários.
A declaração de que name=value ... utility é equivalente a env var="value" utility só será verdadeira se a implementação de env e o shell permitirem que name seja uma variável de ambiente.
Há um tópico interessante do Grupo Austin sobre esse assunto aqui: Invalid shell atribuições no ambiente . Um ponto mencionado é que as shells geralmente permitem apenas variáveis de ambiente cujos nomes podem ser representados como variáveis de shell. Vários participantes desse segmento participam do unix.stackexchange.com e podem adicionar mais informações sobre o assunto.