如何使用jq从含动态键的JSON生成export环境变量命令?
动态生成环境变量导出命令的解决方案
针对你提供的JSON结构(数组中每个对象包含以_GROUP_NAME和_VERSION结尾的动态键),可以用jq工具快速生成对应的export命令,以下是具体实现:
核心命令
假设你的JSON内容保存在input.json文件中,执行以下命令:
jq -r '.[] | to_entries[] | "export \(.key)=\(if .value | type == "string" then "\'\''\(.value | gsub("\'\'"; "\\\'''\''))'\''" else .value end)"' input.json
命令解释
.[]:遍历JSON数组中的每一个对象to_entries[]:将每个对象转换为键值对数组(每个元素格式为{"key": "键名", "value": "对应值"})- 拼接
export语句:- 对字符串类型的值自动添加单引号包裹,同时转义值内部的单引号(避免shell语法错误)
- 数字类型的值直接输出,不需要引号
示例输出
用你提供的JSON输入执行命令后,会输出:
export PREPROCESS_GROUP_NAME='preprocess-group-name' export PREPROCESS_VERSION=2 export CLASSIFIER_GROUP_NAME='classifier-group-name' export CLASSIFIER_VERSION=2 export ABC_GROUP_NAME='abc-group-name' export ABC_VERSION=2
直接生效到当前shell
如果希望生成的环境变量直接在当前shell会话中生效,可以用eval执行命令输出:
eval "$(jq -r '.[] | to_entries[] | "export \(.key)=\(if .value | type == "string" then "\'\''\(.value | gsub("\'\'"; "\\\'''\''))'\''" else .value end)"' input.json)"
注意事项
- 确保系统已安装jq工具(大部分Linux发行版可通过包管理器安装,比如
apt install jq或yum install jq) - 如果JSON中的字符串包含特殊字符(如单引号),上述命令已做转义处理,避免shell解析错误
内容的提问来源于stack exchange,提问作者Adarsh
相关产品推荐
相关产品推荐

