【发布时间】:2020-02-04 07:05:20
【问题描述】:
我在正确为 jq 解析的 bash 数组赋值时遇到问题。我有来自curl 的 JSON 输出:
{
"id": 6442,
"name": "Execute Workflow",
"description": "Plan: data",
"status": "In Queue",
"start_date": 0,
"end_date": 0,
"job_type": "Execute Workflow",
"created_by_name": null,
"creation_date": 1580762385615,
"creation_date_str": "02/03/2020 09:39:45 PM",
"last_updated_date": 1580762385615,
"last_updated_date_str": "02/03/2020 09:39:45 PM",
"last_updated_by_name": null,
"schedule_on": 0,
"paused_at_step": 0,
"percent_complete": 0,
"job_action_type": null,
"child_job_id": -1
}
我想将两个键值 .id 和 .status 保存到 bash 数组中。
我是这样做的:
array=( $(echo '{ "id": 6442, "name": "Execute Workflow", "description": "Plan: data", "status": "In Queue", "start_date": 0, "end_date": 0, "job_type": "Execute Workflow", "created_by_name": null, "creation_date": 1580762385615, "creation_date_str": "02/03/2020 09:39:45 PM", "last_updated_date": 1580762385615, "last_updated_date_str": "02/03/2020 09:39:45 PM", "last_updated_by_name": null, "schedule_on": 0, "paused_at_step": 0, "percent_complete": 0, "job_action_type": null, "child_job_id": -1}' | jq '.id, .status') )
在我尝试获取该数组的第二个元素之前,一切似乎都很好:echo ${array[1]} 我得到了
"In 不是 "In Queue"。
我的数组长 3 个元素 echo ${#array[@]} 返回 3 但我希望它长 2 个元素。
有人可以帮帮我吗?
我在 bash 脚本中的下一步是分配 job_status="=${array[1]}",我想获得变量 job_status="In Queue"。
【问题讨论】:
-
一个快速的解决方法是使用
eval;像eval array=\($(echo ... | jq ...)\),但这被认为是一种不好的做法 -
OP 在我现在删除的答案中的评论对我来说没有意义 - [1 of 2] 背景.. 可能你给我一个建议,我做错了什么。此 curl 命令在后台执行作业并返回我之前发布的 json。然后我想检查作业是否成功。我有另一个 curl 命令可以通过 REST API 检查它。我将 jobId 和 status 保存到数组中,并将它的第一个元素分配给 job_status var,然后在直到循环中使用 curl 检查它。
-
[2 of 2] 一开始状态为“排队中”,然后变为“正在运行”,然后变为“错误”或“成功”。这些输出我将保存到变量而不是数组中,看起来可以吗?
-
Inian,您对 mapfile 的评论确实很有帮助,但您删除了它?