Der Abschnitt POSIX-Standards zu Shells von IEEE Std 1003.1-2008 / IEEE POSIX P1003.2/ISO 9945.2 Shell and Tools definiert keine lexikalische Konvention für Variablennamen, aber ein flüchtiger Blick auf die Quelle zeigt, dass sie etwas Ähnliches verwendet wie
[a-zA-Z_]+[a-zA-Z0-9_]*
(Bearbeiten:Fehlender Unterstrich in der 2. Zeichenklasse hinzugefügt.)
Eine kurze Anmerkung, da einige Shells das + in Regex nicht unterstützen, könnte eine möglicherweise tragbarere Regex sein:
[a-zA-Z_]{1,}[a-zA-Z0-9_]{0,}
Von The Open Group:
Diese Zeichenfolgen haben den Formnamen=Wert; Namen dürfen nicht das Zeichen '=' enthalten. Damit Werte über Systeme hinweg übertragbar sein sollen, die IEEE Std 1003.1-2001 entsprechen, muss der Wert aus Zeichen aus dem übertragbaren Zeichensatz bestehen (außer NU und wie unten angegeben). ).
Namen dürfen also alle Zeichen außer =und NUL enthalten, aber:
Umgebungsvariablennamen, die von den Dienstprogrammen im Shell- und Utilities-Band von IEEE Std1003.1-2001 verwendet werden, bestehen ausschließlich aus Großbuchstaben, Ziffern und dem '_' (Unterstrich) aus den im Portable Character Set definierten Zeichen und beginnen nicht mit einer Ziffer . Andere Zeichen können durch eine Implementierung zugelassen werden; Anwendungen müssen das Vorhandensein solcher Namen tolerieren.
Während also die Namen gültig sein können, unterstützt Ihre Shell möglicherweise nichts außer Buchstaben, Zahlen und Unterstrichen.