bash:如何将变量放入循环命令未找到

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

答案1

尝试这个 :

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

或者更好的是while 循环如果您的值带有空格:

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

笔记 :

  • 你需要 '引用' 这表达
  • jq 可以自行读取文件,不需要cat
  • 停止使用反引号 ` 2018 年请使用$( )
  • < <( )是 bash 独有的功能,其他 shell 中不可用(甚至在以 sh 调用的 bash 中也不可用)。因此,请使用 bash shebang#!/bin/bash或启动脚本#!/usr/bin/env bash,不要通过使用以下sh命令运行脚本来覆盖它

相关内容