[英]Assigning jq output to bash array when json value contains spaces
[英]Assign jq output to bash array
我在为 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]}
并且我得到"In
not "In Queue"
。
我的数组长度为 3 个元素echo ${#array[@]}
返回3
但我希望它的长度为 2 个元素。 有人能帮助我吗?
我在 bash 脚本中的下一步是分配job_status="=${array[1]}"
并且我想获得变量job_status="In Queue"
。
是的,当您分配给数组时,bash 必须转义其所有特殊字符,然后使用默认分隔符(空格)拆分参数。 在源 JSON 中引用参数或空格本身不会有帮助。
因此,要解决这个问题,您需要将IFS
设置为对您的 JSON 数据足够独特的分隔符 - 就示例而言,将其设为逗号(假设您的 JSON 在curl.json
为简洁起见):
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 $
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.