首页 > 解决方案 > jq -n reduce range 因 shell 变量输入而失败

问题描述

我有一个如下所示的 bash 函数。

function createJson
{
START=1
END=100    
jq -n 'reduce range($START; $END) as $data (.; . + [{"field": { "empID": $data, "location": "India"}}])'  > test.json    
}

如果我在“减少范围”中提到直接数值,上述脚本工作正常。例如:

jq -n 'reduce range(0; 100) as $data (.; . + [{"field": { "empID": $data, "location": "India"}}])'  > test.json

但是当我尝试将 shell 变量传递给 jq -n reduce range 时,它​​会引发如下错误。

jq: error: START/0 is not defined at <top-level>, line 1:
reduce range($START; $END) as $data (.; . + [{"field": { "empID": $data, "location": "India"}}])
jq: error: END/0 is not defined at <top-level>, line 1:
reduce range($START; $END) as $data (.; . + [{"field": { "empID": $data, "location": "India"}}])
jq: 2 compile errors

标签: bashjq

解决方案


START 和 END 对 JQ 不可见,因为它们是 shell 变量。您需要将它们作为参数或环境变量传递给 JQ。

jq -n --argjson START 1 --argjson END 100 'reduce range($START; $END) as $data (.; . + [{"field": { "empID": $data, "location": "India"}}])' > test.json

推荐阅读