猿问

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

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

Linux环境变量名称中允许哪些字符?我粗略地搜索手册页和网页只会产生有关如何使用变量的信息,但不会产生允许使用哪些名称的信息。

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


慕哥9229398
浏览 1207回答 3
3回答

一只斗牛犬

来自公开组:这些字符串的格式为name = value; 名称不得包含字符'='。对于可在符合IEEE Std 1003.1-2001的系统中移植的值,该值应由便携式字符集中的字符组成(NUL除外,如下所示)。所以名称可以包含除=和NUL之外的任何字符,但是:IEEE Std 1003.1-2001的Shell和Utilities卷中的实用程序使用的环境变量名称仅由大写字母,数字和便携式字符集中定义的字符的“_”(下划线)组成,并且不以数字开头。实现可以允许其他字符; 申请应容忍此类名称的存在。因此,尽管名称可能有效,但您的shell可能不支持除字母,数字和下划线之外的任何内容。

犯罪嫌疑人X

上壳部分的POSIX标准 IEEE标准1003.1-2008 / IEEE POSIX P1003.2 / ISO 9945.2 壳牌和工具标准没有定义的变量名词法约定,但粗略 看看源揭示它使用类似的东西[a-zA-Z_]+[a-zA-Z0-9_]*(编辑:在第二个字符类中添加了缺少的下划线。)快速说明,因为有些shell不支持正则表达式中的+,可能更具可移植性的正则表达式可能是:[a-zA-Z_]{1,}[a-zA-Z0-9_]{0,}

白衣染霜花

我的快速测试显示它们基本上遵循与C变量名称相同的规则,即az,AZ _和0-9不能以数字开头所以这不包括.在他们内心。任何非法变量名称都被记入unknown command。这是在ZSH中测试的,ZSH主要与BASH兼容。
随时随地看视频慕课网APP
我要回答