3 回答
TA贡献1784条经验 获得超2个赞
来自公开组:
这些字符串的格式为name = value; 名称不得包含字符'='。对于可在符合IEEE Std 1003.1-2001的系统中移植的值,该值应由便携式字符集中的字符组成(NUL除外,如下所示)。
所以名称可以包含除=和NUL之外的任何字符,但是:
IEEE Std 1003.1-2001的Shell和Utilities卷中的实用程序使用的环境变量名称仅由大写字母,数字和便携式字符集中定义的字符的“_”(下划线)组成,并且不以数字开头。实现可以允许其他字符; 申请应容忍此类名称的存在。
因此,尽管名称可能有效,但您的shell可能不支持除字母,数字和下划线之外的任何内容。
TA贡献2080条经验 获得超4个赞
上壳部分的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,}
TA贡献1796条经验 获得超10个赞
我的快速测试显示它们基本上遵循与C变量名称相同的规则,即
az,AZ
_
和0-9不能以数字开头
所以这不包括.
在他们内心。任何非法变量名称都被记入unknown command
。
这是在ZSH中测试的,ZSH主要与BASH兼容。
- 3 回答
- 0 关注
- 1206 浏览
添加回答
举报