Linux环境variables名称中允许的字符

Linux环境variables名称中允许使用哪些字符? 我粗略search手册页和网页,只会产生有关如何使用variables的信息,但不能提供哪些名称。

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

来自公开组 :

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

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

IEEE Std 1003.1-2001的Shell和Utilities卷中的实用程序使用的环境variables名仅由大写字母,数字和便携式字符集中定义的字符中的“_”(下划线)组成, 并不以数字开头 。 其他字符可能被实现所允许; 应用程序应该容忍这些名称的存在。

所以,虽然名字可能是有效的,你的shell可能不支持字母,数字和下划线之外的任何东西。

IEEE Std 1003.1-2008 / IEEE POSIX P1003.2 / ISO 9945.2 Shell和Tools标准的Shell部分上的POSIX标准没有定义variables名称的词汇约定,但是粗略地看一下源代码显示它使用类似于

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

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

我的快速testing表明,它们基本上遵循与Cvariables名称相同的规则,即

  1. az,AZ,和0-9
  2. 不能以数字开头

所以这个排除在外. 在他们里面。 任何非法的variables名称记入unknown command

这在ZSH中testing,主要是BASH兼容的。

取决于“允许”的含义。

忽略Windows的随机数:

环境是一个string数组,传递给程序的主函数。 如果你读了execve(2),除了null结束之外,你将看不到这些string的要求或限制。

按照惯例,每个string由NAME = value组成。 这里没有引用约定,所以在这个约定的名字中不能有'='。

正常人通过与他们的shell讨论来设置这些string。 每个shell都有自己的想法,它是什么是有效的variables名称,所以你必须阅读man-page的shell-of-the-moment,看看它的想法。

一般来说,像com.baseball.spit = fleagh这样的东西是Java系统属性,不pipe某个Java程序是否愿意回退到环境中,最好用-D来指定它们。

这取决于shell。 我猜你是默认使用bash,在这种情况下,字母,数字和下划线是允许的,但是你不能用数字来启动variables名。 从Bash v.3开始, variables名称中不允许使用句点 。