如何编写一个bash函数,用jq将bash变量添加到json文件中?
我想用jq将bash变量添加到某个JSON文件中。以下方法有效:如何编写一个bash函数,用jq将bash变量添加到json文件中?,json,bash,jq,Json,Bash,Jq,我想用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() {
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}'
jq:error:syntax error,意外的无效字符,在第1行“.+{MYVAR:$MYVAR}”处应为$end(Unix shell引用问题?)
你知道这里发生了什么吗?如何正确引用?谢谢大家! 如果您考虑的策略依赖于访问全局变量的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
}
调用示例
记录在案
如果您考虑的策略依赖于访问全局变量的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
}
调用示例
记录在案
export x=xyzzy
jq -n --arg a x '{($a): $ENV[$a]}'
{
"x": "xyzzy"
}