nix - 关于 Nix 包管理的 Nix 表达式是什么?

标签 nix

即使在阅读了 Nix 手册之后,仍然对 Nix 表达式的真正含义感到困惑。有时它们被称为派生,但存储派生也有其他含义。

最佳答案

在 Nix 中,Nix 表达式只是您可以用 Nix 语言编写的任何类型的值的通用术语。 Nix 表达式可以是集合、列表、数字、字符串、函数、名称、算术运算、函数调用等等。

Nix 表达式可以包含其他 Nix 表达式:例如,表达式 1 + 2其中包含两个表达式:12 .

人们通常喜欢编写复杂的 Nix 表达式来表示如何构建软件。这些表达式实际上只是具有一些特殊属性的集合。 Nix 软件可以评估这样的表达式并将其转换为 .drv文件(描述如何构建某些软件的一种非常简单、紧凑的方式),然后可以构建它。

您可以使用 Nix 语言和 Nix 表达式做很多不涉及派生或构建软件的事情。 nix eval命令可让您评估 Nix 表达式。运行 nix eval --help查看其帮助屏幕,或运行这些命令来计算一些简单的表达式:

nix eval '(1 + 2)'  # gives 3

nix eval '({ a = 1; b = 2; }.a)'  # gives 1

(出于某种原因,这个命令似乎要求在它评估的大多数 Nix 表达式周围放置括号,但这似乎是一个错误或奇怪的设计选择,并且括号不是每个 Nix 表达式的重要组成部分。)

关于nix - 关于 Nix 包管理的 Nix 表达式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58243554/

相关文章:

haskell - 如何使用 "nix search"搜索 Haskell 软件包?

nix - 使用 `imports` 和 lib.mkOption 给出的参数

Nix:如何在 nixpkgs.mkShell 中更改 stdenv

python - Nixos:如何获得带有包中包含的调试信息的 python?

nix - 相同的代码和相同的编译器可以在不同的机器上生成不同的二进制文件吗?

Docker — 无法连接到 unix :///var/run/docker. sock 上的 Docker 守护进程

php - 通过 Nix flake 安装时,Composer 读取的 PHP 版本不正确

c++ - 如何在 Eclipse 中使用 nix

nix - nix-env 如何提前知道存储路径?

haskell - 如何使用 haskell 堆栈创建一个 nix 包