Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.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
有没有办法读取JSON文件中的所有键值对,然后在shell中相应地初始化所有变量?_Json_Bash_Shell_Variables_Jq - Fatal编程技术网

有没有办法读取JSON文件中的所有键值对,然后在shell中相应地初始化所有变量?

有没有办法读取JSON文件中的所有键值对,然后在shell中相应地初始化所有变量?,json,bash,shell,variables,jq,Json,Bash,Shell,Variables,Jq,给定一个JSON文件,arguments.JSON: {"dagger": true, "version": false, "nether_strike": true, "greater_bash": "5", "FILE": "ancientscroll.txt", "empower_haste": "1", "help": false} 我可以在shell中使用jq读取并分别初始化变量: dagger=$(cat arguments.json | jq '.["dagger"]')

给定一个JSON文件,
arguments.JSON

{"dagger": true, "version": false, "nether_strike": true, 
 "greater_bash": "5", "FILE": "ancientscroll.txt", 
 "empower_haste": "1", "help": false}
我可以在shell中使用
jq
读取并分别初始化变量:

dagger=$(cat arguments.json | jq '.["dagger"]')
greater_bash =$(cat arguments.json | jq '.["greater_bash"]')    

echo $dagger
echo $greater_bash

有没有办法读取JSON文件中的所有键值对,然后在shell中相应地初始化所有变量?

您可以在键值对上循环,并使用
声明
动态创建变量名

while read -r name value; do
    declare "$name=$value"
done < <(jq -r 'to_entries[] | "\(.key) \(.value)"' arguments.json)
读取时-r名称值;做
声明“$name=$value”

对不起,没有贝壳,我读起来有点难。在哪里可以输入
参数.json
?是不是
Oops,我忘了。它应该是
jq
的最后一个参数。您对此有何看法<代码>source@glennjackman这很危险。考虑一个像“代码”> {“fo”):“Bar”BZ“} /代码>这样的人为输入。最后,您尝试执行<代码> Fo=“Bar”BAZ“< /代码>,以一个未关闭的引用。作为一个旁白,<代码> JQ(像几乎每个有能力编写的UNIX实用程序)接受文件名参数,如果它没有(与<代码> TR < /代码>),您将使用重定向来避免.<代码>匕首=$(jq.[“匕首”]'