162 votes

Caractères autorisés dans les noms de variables d'environnement Linux

Quels caractères sont autorisés dans les noms de variables d'environnement Linux? Ma recherche superficielle dans les pages de manuel et sur le Web ne produisait que des informations sur la manière de travailler avec des variables, mais pas sur les noms autorisés.

J'ai un programme Java qui nécessite une variable d'environnement définie contenant un point, comme com.example.fancyproperty . Avec Windows, je peux définir cette variable, mais je n’ai pas eu la chance de le définir sous Linux (essayé sous SuSE et Ubuntu). Ce nom de variable est-il même autorisé?

224voto

Robert Gamble Points 41984

À Partir De L'Ouverture Du Groupe:

Ces chaînes sont de la forme nom=valeur; les noms ne doivent pas contenir de le caractère '='. Pour les valeurs à portable sur l'ensemble des systèmes conformes à la IEEE Std 1003.1-2001, la valeur doit être composé de caractères à partir de la portable jeu de caractères (à l'exception NUL et comme indiqué ci-dessous).

Donc, les noms peuvent contenir n'importe quel caractère sauf = et NUL, mais:

Noms de variables d'environnement utilisées par les services publics dans la Coquille et Utilitaires volume de la norme IEEE Std 1003.1-2001 composée uniquement de lettres majuscules, les chiffres, et le '_' (trait de soulignement) de l'caractères défini Portable de Jeu de Caractères et ne pas commencer par un chiffre. D'autres les caractères peuvent être autorisés par un la mise en œuvre; les demandes sont tolérer la présence de ces noms.

Ainsi, alors que les noms peuvent être valide, votre shell peut pas soutenir autre chose que des lettres, des chiffres, et des caractères de soulignement.

41voto

Aiden Bell Points 19856

Les normes de POSIX sur les coquilles de la section de IEEE Std 1003.1-2008 / IEEE POSIX P1003.2/ISO 9945.2 Shell et Outils standard ne définit pas le lexique de la convention pour les noms de variables, cependant, un rapide coup d' regardez la source révèle qu'il utilise quelque chose de similaire à

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

(Edit: Ajout du trait de soulignement manquant dans la 2e classe de caractères.)

14voto

LukeN Points 3191

Mes tests rapides ont montré qu’elles suivaient essentiellement les mêmes règles que les noms de variables C, à savoir:

  1. az, AZ, _ et 0-9
  2. Peut NE PAS commencer par un chiffre

Donc, cela exclut . intérieur. Tout nom de variable illégal est crédité de unknown command .

Ceci a été testé en ZSH, qui est largement compatible avec BASH. :)

6voto

bmargulies Points 49855

Dépend de ce que tu veux dire par "autorisés".

Ignorant Windows pour l'instant:

L'environnement est un tableau de chaînes, passé à la fonction principale d'un programme. Si vous lisez execve(2), vous ne verrez pas les exigences ou les limites de ces chaînes de valeur différente de null-la résiliation.

Par convention, chaque chaîne est constituée de NOM=valeur. Il n'y a pas de citer la convention, de sorte que vous ne pouvez pas avoir un " = " dans le nom de la présente convention.

Des humains normaux ensemble de ces chaînes en discutant avec leur coquille. Chaque coque a ses propres idées de ce que l'on valide les Noms de variables, de sorte que vous avez à lire la page de man pour la coquille de l'instant, pour voir ce qu'il pense.

En général, des choses comme com.de baseball.spit=fleagh sont propriétés système Java, et si ou non un programme Java est prêt à revenir à l'environnement, il est préférable de les définir avec -D.

5voto

ire_and_curses Points 32802

Cela dépend de la coquille. Je suppose que vous utilisez bash par défaut, auquel cas des lettres, des chiffres et des traits de soulignement sont autorisés, mais impossible de démarrer le nom de la variable avec un certain nombre. À partir de Bash v.3, périodes ne sont pas autorisés dans les noms de variables.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X