IEEE Std 1003.1-2008 / IEEE POSIX P1003.2/ISO 9945.2Shell and Tools 標準のシェルに関する POSIX 標準セクションでは、変数名の語彙規則は定義されていませんが、ソースをざっと見ると、次のようなものを使用していることがわかります
[a-zA-Z_]+[a-zA-Z0-9_]*
(編集:2 番目の文字クラスに不足していたアンダースコアを追加しました。)
一部のシェルは正規表現の + をサポートしていないため、潜在的により移植性の高い正規表現は次のようになります:
[a-zA-Z_]{1,}[a-zA-Z0-9_]{0,}
オープン グループから:
<ブロック引用>これらの文字列の形式は name=value; です。 名前に文字「=」を含めないでください。 IEEE Std 1003.1-2001 に準拠するシステム間で値を移植できるようにするには、値を移植可能な文字セットの文字で構成する必要があります (以下に示す NULand を除く)。 ).
したがって、名前には =と NUL 以外の任意の文字を含めることができますが、
<ブロック引用>IEEE Std1003.1-2001 のシェルおよびユーティリティ ボリュームのユーティリティで使用される環境変数名は、大文字、数字、および「_」(アンダースコア) のみで構成されます Portable Character Set で定義された文字から数字で始まらない .他の文字は、実装によって許可される場合があります。アプリケーションは、そのような名前の存在を許容するものとします。
そのため、名前が有効であっても、シェルが文字、数字、アンダースコア以外をサポートしていない可能性があります。