如何在 Bash 中导出大量变量?

use*_*970 12 environment-variables variable syntax

我使用 Bash 4.3.48(1) 并且.sh在 shebang 下有一个包含大约 20 个变量的文件。该文件仅包含变量。

这是模式:

x="1"
y="2"
...
Run Code Online (Sandbox Code Playgroud)

我需要以DRY方式导出所有这些变量:例如,一个export对所有变量,而不是说 20export对 20 个变量。

该文件中执行此操作的最优雅方式(最短、最有效)是什么?

一个for循环?一个array?也许比这些更简单(某种集合糖语法)?

Kus*_*nda 22

在文件顶部使用set -a(或等效的set -o allexport)来启用allexportshell 选项。然后在文件末尾(在适当的地方)使用set +a(或set +o allexport) 来禁用allexportshell 选项。

使用启用allexportshell 选项将产生以下效果(来自bash手册):

创建或修改的每个变量或函数都被赋予导出属性并标记为导出到后续命令的环境。

此壳选项,设置与任一set -aset -o allexport,是在POSIX定义(因此应适用于所有sh样壳)作为

当此选项打开时,应为执行赋值的每个变量设置导出属性;[...] 如果分配在命令中的实用程序名称之前,则在实用程序完成后导出属性不应保留在当前执行环境中,但特殊内置实用程序之一之前的导出属性会导致导出属性内置完成后持久化。如果赋值不在命令中的实用程序名称之前,或者如果赋值是getoptsread实用程序操作的结果,则导出属性将持续到变量未设置为止。

启用此选项时设置的变量将被导出,即成为环境变量。像往常一样,这些环境变量将可用于当前的 shell 环境和任何随后创建的子进程环境。

这意味着您必须要么

  • 源此文件(使用.,或source在具有此命令的外壳程序中),或
  • 启动应该可以访问该文件中变量的进程。