Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何编写一个bash函数,用jq将bash变量添加到json文件中?_Json_Bash_Jq - Fatal编程技术网

如何编写一个bash函数,用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将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}'
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"
}