La section Normes POSIX sur les shells de la norme IEEE Std 1003.1-2008 / IEEE POSIX P1003.2/ISO 9945.2Shell and Tools ne définit pas la convention lexicale pour les noms de variables, mais un coup d'œil rapide à la source révèle qu'elle utilise quelque chose de similaire à
[a-zA-Z_]+[a-zA-Z0-9_]*
(Edit :ajout d'un trait de soulignement manquant dans la 2e classe de caractères.)
Une note rapide, comme certains shells ne prennent pas en charge le + dans regex, une regex potentiellement plus portable peut être :
[a-zA-Z_]{1,}[a-zA-Z0-9_]{0,}
Du groupe ouvert :
Ces chaînes ont le formname=value; les noms ne doivent pas contenir le caractère '='. Pour que les valeurs soient transférables sur des systèmes conformes à la norme IEEE 1003.1-2001, la valeur doit être composée de caractères du jeu de caractères portable (sauf NULet comme indiqué ci-dessous ).
Ainsi, les noms peuvent contenir n'importe quel caractère sauf =et NUL, mais :
Les noms de variables d'environnement utilisés par les utilitaires dans le volume Shell andUtilities de IEEE Std1003.1-2001 se composent uniquement de lettres majuscules, de chiffres et du '_'(trait de soulignement) à partir des caractères définis dans Portable Character Set et ne commencent pas par un chiffre . D'autres caractères peuvent être autorisés par une implémentation ; les applications doivent tolérer la présence de tels noms.
Ainsi, bien que les noms soient valides, votre shell peut ne rien prendre en charge à part les lettres, les chiffres et les traits de soulignement.