在Bash中将环境变量导出为JSON

6
环境变量可以通过在bash中使用exportprintenv打印,但是如何将其输出转换为JSON格式并存储到变量中呢?
1个回答

11
JQ可以为您完成此操作,并将结果填充到名为ENV的内部变量中,可以像这样将其存储在shell变量中:
var=$(jq -n '$ENV')

要移除列表中的垃圾变量,例如_SHLVL等,您可以使用JQ的del函数。

var=$(jq -n '$ENV | del(._, .SHLVL)')

2
@DaniyalBasitKhan 将任意字符串转换为正确转义的 JSON 字符串对于 shell 脚本来说并不是一项简单的任务。 - Léa Gris
@oguz-ismail 我在我的电脑上运行jq: error: ENV/0 is not defined at <top-level>, line 1:没有问题,但在我们的CI runner上却无法正常工作。 - Daniyal Basit Khan
@Daniyal,我认为你可能漏掉了美元符号。它应该是$ENV而不是ENV,当你运行jq -n 'ENV'时才会出现那个错误信息。 - oguz ismail
@oguzismail 我使用了 $ENV。我在 GitLab runner 中运行此命令,runner 将使用 export 命令打印所有环境变量。响应将如下所示:export ENV_NAME1="env_value1" export ENV_NAME2="env_value2" ... - Daniyal Basit Khan
@Daniyal 我理解你的问题,但是如果我无法重现你所面临的问题,我就无法提供帮助。 - oguz ismail

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接