我正试图将以下命令的输出保存在脚本中的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字符串,以避免不必要的子外壳创建