bash - 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
解决方案
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
推荐阅读
- php - 如何使用模块和挂钩将自定义产品字段添加到 prestashop
- neo4j - 如何折叠/合并具有相同节点的两个不同图形并结合neo4j图形数据库中的属性?
- reactjs - 将对象添加到状态中的现有数组
- php - 读取存储在 php 数据库中的 .docx 文件
- regex - RegEx 匹配所有单词字符,以及来自不同语言的变音符号
- microsoft-teams - Microsoft Teams:选择时自动完成
- css - 为 Firefox Mobile 设计 option_ui 和 browser_action 页面
- c++ - “充分表达”与“充分表达”
- sql - 如何确定数据集中的开始和结束活动?
- php - 如果未登录,则重定向到 login.php