无法在命令行上使用 jq use/pass shell 变量
Cannot use/pass shell variables using jq on command line
我是 jq 的新手,我正在使用本教程将新组织添加到超级账本结构网络。
整个教程中大量使用了 jq,尤其是修改 json 个文件。
本教程使用示例组织名称,但我试图使组织名称动态化。除了我尝试将变量传递给 jq 之外,一切都很好。
这是 jq 命令及其输出。
jq版本:1.5.1
$ 导出 MSPID=Org4MSP
$ echo $MSPID
Org4MSP
正在尝试使用 env 传递变量。
关键词:env.MSPID
$ jq -s '.[0] * {"channel_group":{"groups":{"Application":{"groups": {"env.MSPID":.[1]}}}}}' config.json org4.json
输出片段:它不打印 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
输出片段:它不打印 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: 错误:语法错误,意外的“:”,期待“}”(Unix shell 引用问题?)第 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 变量的值。
谢谢
环境变量
在你的子表达式中:
{"env.MSPID":.[1]}
您引用了 env.MSPID
从而使其成为文字字符串。既然你想调用 env
函数,你应该改写:
{ (env.MSPID):.[1]}
需要括号以确保 jq 正确计算带括号的表达式。
{$MSP:.[1]}
如上所述,当必须评估表达式以确定键的字符串值时,必须将表达式括起来,例如
{($MSP):.[1]}
我是 jq 的新手,我正在使用本教程将新组织添加到超级账本结构网络。
整个教程中大量使用了 jq,尤其是修改 json 个文件。
本教程使用示例组织名称,但我试图使组织名称动态化。除了我尝试将变量传递给 jq 之外,一切都很好。
这是 jq 命令及其输出。
jq版本:1.5.1
$ 导出 MSPID=Org4MSP $ echo $MSPID Org4MSP
正在尝试使用 env 传递变量。
关键词:env.MSPID
$ jq -s '.[0] * {"channel_group":{"groups":{"Application":{"groups": {"env.MSPID":.[1]}}}}}' config.json org4.json
输出片段:它不打印 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
输出片段:它不打印 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: 错误:语法错误,意外的“:”,期待“}”(Unix shell 引用问题?)第 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 变量的值。
谢谢
环境变量
在你的子表达式中:
{"env.MSPID":.[1]}
您引用了 env.MSPID
从而使其成为文字字符串。既然你想调用 env
函数,你应该改写:
{ (env.MSPID):.[1]}
需要括号以确保 jq 正确计算带括号的表达式。
{$MSP:.[1]}
如上所述,当必须评估表达式以确定键的字符串值时,必须将表达式括起来,例如
{($MSP):.[1]}