簡體   English   中英

將 jq 輸出分配給 bash 數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM