在任何地方都找不到语言规范,它基本上是nix源?仓库的读书文件指的是NIX手册,但似乎不完整。例如,4.2。Nix药丸中的标识符提到可以使用破折号( - (,手册甚至从未提及标识符语法。
update :刚刚找到已经封闭的(未解决的(nixos/nix问题#592没有关于有效符号/变量名称的文档
可能有更好的引用,但至少您可以检查Lexer的来源,该来源定义标识符
ID [a-zA-Z_][a-zA-Z0-9_'-]*
作为由ASCII字母,数字,_
,'
或-
组成的字符串,并以字母或_
开始。
(更新:这引用了过时的参考语法,而不是工作语法。(
根据语法,标识符不能包含 -
:
<production id="nix.id">
<lhs>Id</lhs>
<rhs>[a-zA-Z_][a-zA-Z0-9_']*</rhs>
</production>
但是路径可以:
<production id="nix.path">
<lhs>Path</lhs>
<rhs>[a-zA-Z0-9._-+]*(/[a-zA-Z0-9._-+]+)+</rhs>
</production>
我不完全确定哪种评估过程导致重复报告句法有效的路径,该路径是未定义的变量。