Caracteres permitidos em nomes de variables ​​de ambiente do Linux

Quais caracteres são permitidos em nomes de variables ​​de ambiente linux? Minha pesquisa superficial de man pages e da web apenas produzia informações sobre como trabalhar com variables, mas não quais nomes são permitidos.

Eu tenho um programa Java que requer uma variável de ambiente definida contendo um ponto, como com.example.fancyproperty . Com o Windows eu posso definir essa variável, mas não tive sorte configurando-a no linux (tentei no SuSE e no Ubuntu). Esse nome de variável é permitido mesmo?

    Do grupo aberto :

    Essas cadeias têm o formato nome = valor; nomes não devem conter o caractere ‘=’. Para que os valores sejam portáveis ​​entre sistemas em conformidade com o padrão IEEE 1003.1-2001, o valor deve ser composto de caracteres do conjunto de caracteres portáteis ( exceto NUL e conforme indicado abaixo ).

    Então, os nomes podem conter qualquer caractere, exceto = e NUL, mas:

    Os nomes de variables ​​de ambiente usados ​​pelos utilitários no volume Shell e Utilities do IEEE Std 1003.1-2001 consistem unicamente em letras maiúsculas, dígitos e ‘_’ (sublinhado) dos caracteres definidos no Conjunto de Caracteres Portáteis e não começam com um dígito . Outros caracteres podem ser permitidos por uma implementação; as aplicações devem tolerar a presença de tais nomes.

    Então, enquanto os nomes podem ser válidos, seu shell pode não suportar nada além de letras, números e sublinhados.

    O padrão POSIX na seção shells do padrão IEEE Std 1003.1-2008 / IEEE POSIX P1003.2 / ISO 9945.2 Shell e Tools não define a convenção lexical para nomes de variables, no entanto, uma olhada superficial na fonte revela que ela usa algo semelhante a

    [a-zA-Z_]+[a-zA-Z0-9_]*

    (Edit: Adicionado underscore em falta na segunda class de personagem.)

    Uma nota rápida, como alguns shells não suportam o + in regex, um regex potencialmente mais portátil pode ser:

    [a-zA-Z_]{1,}[a-zA-Z0-9_]{0,}

    Meus testes rápidos mostraram que eles basicamente seguem as mesmas regras que os nomes de variables ​​C,

    1. az, AZ, _ e 0-9
    2. NÃO pode começar com um número

    Então isso exclui . dentro deles. Qualquer nome de variável ilegal é creditado com unknown command .

    Isso foi testado no ZSH, que é principalmente compatível com BASH.

    Depende do que você quer dizer com ‘permitido’.

    Ignorando o Windows para o nonce:

    O ambiente é um array de strings, passado para a function principal de um programa. Se você ler execve (2), não verá requisitos ou limites nessas sequências além da terminação nula.

    Por convenção, cada string consiste em NAME = value. Não há convenção de cotação, então você não pode ter um ‘=’ no nome desta convenção.

    Humanos normais definem essas cordas, discutindo-as com sua concha. Cada shell tem suas próprias idéias do que são variables ​​válidas NAMEs, então você tem que ler a página de manual para o shell-of-the-moment para ver o que ele pensa.

    Geralmente, coisas como com.baseball.spit = fleagh são propriedades do sistema Java, e se algum programa Java está ou não disposto a retornar ao ambiente, é melhor especificá-las com -D.

    Depende do shell. Eu estou supondo que você está usando bash por padrão, caso em que letras, números e sublinhados são permitidos, mas você não pode iniciar o nome da variável com um número. A partir do Bash v.3, os períodos não são permitidos dentro dos nomes das variables .