有没有办法读取JSON文件中的所有键值对,然后在shell中相应地初始化所有变量?
给定一个JSON文件,有没有办法读取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"]')
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.[“匕首”]'