Назад | Перейти на главную страницу

bash: как поместить переменную в цикл-команду, не найденную

jq '.issues[].fields.subtasks[].fields | .issuetype.subtask' 1.json

работает как ожидалось (получая "true" в качестве вывода) при попытке поместить команду выше как переменную

for custom_field in `cat 1.json | jq .issues[].fields.subtasks[].fields | .issuetype.subtask`; do
      echo $customfield
done

получение :.

issuetype.subtask: command not found

Попробуй это :

for custom_field in $(
    jq '.issues[].fields.subtasks[].fields | .issuetype.subtask' 1.json
); do
      echo "$customfield"
done

Или лучше с пока цикл если у вас есть значения с пробелами:

while IFS= read -r customfield; do
    echo "$customfield"
done < <(jq '.issues[].fields.subtasks[].fields | .issuetype.subtask' 1.json)

Примечание :

  • тебе надо 'цитата'the выражение
  • jq может читать файл сам по себе, нет необходимости cat
  • прекратите использовать обратные кавычки `в 2018, пожалуйста, используйте $ ()
  • < <( ) это функция только для bash, недоступная в других оболочках (или даже в bash, когда она вызывается как sh). Итак, начните свой скрипт с bash shebang #!/bin/bash или #!/usr/bin/env bash и не отменяйте это, запуская сценарий с sh команда