【发布时间】:2020-01-10 18:11:05
【问题描述】:
我是 jq 的新手,我正在使用本教程将新的组织添加到超级账本结构网络中。
整个教程都大量使用了 jq,尤其是修改 json 文件。
本教程使用示例组织名称,但我试图使组织名称动态化。一切都很顺利,除非我尝试将变量传递给 jq。
这是 jq 命令及其输出。
jq 版本:1.5.1
$ 导出 MSPID=Org4MSP $回声$MSPID 组织4MSP
尝试使用 env 传递变量。
关键字:env.MSPID
$ jq -s '.[0] * {"channel_group":{"groups":{"Application":{"groups": {"env.MSPID":.[1]}}}}}' config.json org4.json
输出 sn-p:它不打印 Org4MSP,而是打印文字字符串 env.MSPID
"env.MSPID": {
"groups": {},
"mod_policy": "Admins",
"policies": {
"Admins": {
"mod_policy": "Admins",
"policy": {
"type": 1,
"value": {
"identities": [
{
尝试使用 --arg 选项传递变量
关键字:“$MSP”
jq --arg MSP "$MSPID" -s '.[0] * {"channel_group":{"groups":{"Application":{"groups": {"$MSP":.[1]}}}}}' config.json org4.json
输出 sn-p:它不打印 Org4MSP,而是打印文字字符串 $MSP
"$MSP": {
"groups": {},
"mod_policy": "Admins",
"policies": {
"Admins": {
"mod_policy": "Admins",
"policy": {
"type": 1,
"value": {
"identities": [
{
尝试使用 --arg 选项而不使用双引号来传递变量:
关键字:$MSP
$ jq --arg MSP "$MSPID" -s '.[0] * {"channel_group":{"groups":{"Application":{"groups": {$MSP:.[1]}}}}}' config.json org4.json
jq: error: syntax error, unexpected ':', expecting '}' (Unix shell quoting issues?) at , line 1:
.[0] * {"channel_group":{"groups":{"Application":{"groups": {$MSP:.[1]}}}}}
jq: 1 编译错误
尝试使用 env 传递变量。并且没有双引号:
关键字:env.MSPID
$ jq -s '.[0] * {"channel_group":{"groups":{"Application":{"groups": {env.MSPID:.[1]}}}}}' config.json org4.json
jq: 错误:语法错误,意外 FIELD,期待 '}'(Unix shell 引用问题?)在第 1 行:
.[0] * {"channel_group":{"groups":{"Application":{"groups": {env.MSPID:.[1]}}}}}
jq: 1 编译错误
如果这似乎是一个微不足道的问题,我深表歉意,但我在网上和文档中进行了搜索,但不明白为什么 JSON 键不会转换为 shell 变量的值。
谢谢
【问题讨论】:
标签: environment-variables key command-line-arguments jq