So, what is the purpose of allowing arbitrary name in form
env var=value
and 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.