转义jq查询并将输出保存在bash变量中



我正试图将以下命令的输出保存在脚本中的bash变量中。但是,无论我多么努力,我都无法正确地逃避引用。

这是我想要将其输出保存在变量中的命令。

$ echo '[{"field":"fieldA","bucket":["a","b","c"]},{"field":"fieldB","bucket":["a","b","c","d"]}]' | jq -r '.[]|{field, bucketText: .bucket|join(", ")}|join(" found in bucket: ")'
fieldA found in bucket: a, b, c
fieldB found in bucket: a, b, c, d

这是我在脚本文件中的尝试

#!/bin/bash
INPUT='[{"field":"fieldA","bucket":["a","b","c"]},{"field":"fieldB","bucket":["a","b","c","d"]}]'
OUTPUT_LINES="$(echo ${INPUT} | jq -r '.[]|{field, bucketText: .bucket|join(", ")}|join(" found in bucket: ")')"
printf "%sn" "${OUTPUT_LINES}"

您可以使用以下脚本:

#!/bin/bash
input='[{"field":"fieldA","bucket":["a","b","c"]},{"field":"fieldB","bucket":["a","b","c","d"]}]'
output="$(jq -r '.[]|{field, bucketText: .bucket|join(", ")}|join(" found in bucket: ")' <<< "$input")"
printf "%sn" "$output"

输出:

fieldA found in bucket: a, b, c
fieldB found in bucket: a, b, c, d

建议更改:

  • 无需在单引号jq命令中转义双引号
  • 建议使用小写变量,而不是全部大写
  • 避免管道,并在jq命令中使用here字符串,以避免不必要的子外壳创建

最新更新