json - 如何编写一个 bash 函数,将 bash 变量添加到带有 jq 的 json 文件中?
问题描述
我想用 jq 将 bash 变量添加到一些 JSON 文件中。以下方法有效:
jq --arg VAR "$VAR" '.+{VAR:$VAR}' my.json > my.tmp.json && mv my.tmp.json my.json
VAR 是一个 bash 变量。但是当我添加许多变量时,我想提取如下函数:
#$1 Variable Name; The entry {"$1": "$($1)"} should be added to my.json
config_add() {
COMMAND="jq --arg VAR \"\$VAR\" '.+{VAR:\$VAR}' my.json"
#Replace VAR with the argument
${COMMAND//VAR/$1} my.json > my.json.tmp && my.json.tmp my.json
}
但是对于我尝试的任何变体,我都会收到:
jq: error: syntax error, unexpected INVALID_CHARACTER, expecting $end (Unix shell quoting issues?) at <top-level>, line 1:'.+{MYVAR:$MYVAR}'
任何想法这里发生了什么?如何正确引用它?谢谢!
解决方案
如果您想到的策略取决于可以访问全局变量的 bash 函数,那么最好采用替代方法,如下所示:
config_add() {
local VAR="$1"
local VALUE="$2"
jq --arg VAR "$VAR" --arg VALUE "$VALUE" '.+{($VAR): $VALUE}' > my.json.tmp && my.json.tmp my.json
}
调用示例
x=myvar
myvar=foo
config_add x "$x"
config_add "$x" "${!x}"
作为记录
export x=xyzzy
jq -n --arg a x '{($a): $ENV[$a]}'
{
"x": "xyzzy"
}
推荐阅读
- agile - 小型 DevOps 团队的最佳敏捷方法
- python - 无法在 Windows 上导入 rest_framework 但可以在 Ubuntu 上导入?
- tensorflow - 关于时间序列预测的一般问题
- python - 为什么 Beautiful soup 找不到我要找的 html 元素?
- python - 为什么发生参数错误时不使用修饰函数的名称?
- rust - 了解 Rust 堆栈分配
- python - opencv 和 pyqt 使用的两组 Qt 二进制文件
- python - 如何在 Python 中解析来自 YAHOO.Finance.SymbolSuggest.ssCallback 的结果
- android - 我正在使用 android studio 4.0 并面临错误消息无法加载包装器属性
- react-native - 找不到变量 Connect ,堆栈 React native