Linux 环境变量名称中允许的字符

新手上路,请多包涵

Linux 环境变量名称中允许使用哪些字符?我对手册页和网络的粗略搜索只提供了有关如何使用变量的信息,但没有提供允许使用哪些名称的信息。

我有一个 Java 程序,它需要一个包含点的已定义环境变量,例如 com.example.fancyproperty 。在 Windows 中,我可以设置该变量,但我没有在 linux 中设置它(在 SuSE 和 Ubuntu 中尝试过)。甚至允许该变量名吗?

原文由 Christian Semrau 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 614
2 个回答

来自 公开组

这些字符串的形式为 name=value; 名称不得包含字符“=”。 对于在符合 IEEE Std 1003.1-2001 的系统中可移植的值,该值应由可移植字符集中的字符组成( NUL 除外,如下所示)。

因此名称可以包含除 = 和 NUL 之外的任何字符,但是:

IEEE Std 1003.1-2001 的 Shell 和 Utilities 卷中的实用程序使用的环境变量名称仅由大写字母、数字和来自 Portable Character Set 中定义的字符的“_”(下划线) 组成, 并且不以数字开头.实现可能允许其他字符;应用程序应容忍此类名称的存在。

因此,虽然名称可能有效,但您的 shell 可能不支持除字母、数字和下划线之外的任何内容。

原文由 Robert Gamble 发布,翻译遵循 CC BY-SA 2.5 许可协议

IEEE Std 1003.1-2008 / IEEE POSIX P1003.2/ISO 9945.2 Shell and Tools 标准的 shell 部分的 POSIX 标准没有定义变量名称的词汇约定,但粗略 查看源代码 显示它使用类似于

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

(编辑:在第二个字符类中添加了缺少的下划线。)

快速说明,由于某些 shell 不支持正则表达式中的 +,因此可能更便携的正则表达式可能是:

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

原文由 Aiden Bell 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题