Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 将jq输出分配给bash数组_Arrays_Json_Bash_Jq - Fatal编程技术网

Arrays 将jq输出分配给bash数组

Arrays 将jq输出分配给bash数组,arrays,json,bash,jq,Arrays,Json,Bash,Jq,我无法正确地将值分配给bash数组,该数组由jq解析。我有一个来自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, "cre

我无法正确地将值分配给bash数组,该数组由
jq
解析。我有一个来自
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]}
然后我获取
“在队列中”而不是
“在队列中”

我的数组有3个元素长
echo${#array[@]}
返回
3
但我希望它有2个元素长。 有人能帮我吗


我在bash脚本中的下一步是分配
job_status=“=${array[1]}”
,我想在队列中获取变量
job_status=“

是的,当您分配给数组时,bash必须转义其所有特殊字符,然后使用默认分隔符(即空格)拆分参数。在源JSON中引用参数或空格本身都会有所帮助

因此,为了解决这个问题,您需要将
IFS
设置为分隔符,该分隔符对于JSON数据来说足够唯一-为了示例的缘故,让它为逗号(为了简洁起见,假设您的JSON位于
curl.JSON
):


bash$ifs=“$ifs”;如果s=',';数组=($)(一个快速的解决方法是使用
eval
;就像
eval数组=\($(echo…| jq…)
),但这被认为是一个不好的做法p在我现在删除的答案中的评论对我来说没有意义-[1/2]后台..可能你给了我一个我做错了什么的建议。这个curl命令在后台执行作业,并返回我之前发布的json。然后我想检查作业是否成功。我有另一个curl命令通过REST API检查它。我将jobId和status保存到数组中,并将它的第一个元素分配给job_statuss var,然后用curl in until loop检查它。[2/2]开始时状态为“in Queue”,然后变为“Running”,然后变为“Error”或“successed”。这些输出我将保存到变量中而不是数组中,看起来还可以吗?在印度,你关于mapfile的评论非常有用,但你删除了它?
bash $ ifs="$IFS"; IFS=','; array=($(<curl.json jq -r '[.id, .status] | @csv')); IFS="$ifs"
bash $ echo ${#array[@]}
2
bash $ echo ${array[1]}
"In Queue"
bash $