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名称相同的规则,即
- az,AZ,和0-9
- 不能以数字开头
所以这个排除在外.
在他们里面。 任何非法的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名称中不允许使用句点 。