【发布时间】:2021-10-20 10:29:30
【问题描述】:
我正在尝试创建 JSON 数据并将其存储到文件中,然后将其提供给我将要进行的 API 调用。但是,在格式化我的 echo 命令的输出以制作 JSON 格式时,一个变量会导致返回的输出混乱。下面是我的脚本
cat "${SETTINGS_LIST}" | while read endpoint
do
echo "{\"id\": \"$n\", \"method\": GET, \"url\": \"$endpoint\"}"
let n=n+1
done
那么这是 SETTING_LIST 变量的内容
/accounting-rules
/aging-buckets
/application-rules
/audit-trail-settings
/batch-aliases
/billing-cycle-types
/billing-list-price-bases
/billing-period-starts
/billing-periods
/billing-rules
输出是这样返回的:
"}id":"0","method":"GET","url":"/accounting-rules
"}id":"1","method":"GET","url":"/aging-buckets
"}id":"2","method":"GET","url":"/application-rules
"}id":"3","method":"GET","url":"/audit-trail-settings
"}id":"4","method":"GET","url":"/batch-aliases
"}id":"5","method":"GET","url":"/billing-cycle-types
"}id":"6","method":"GET","url":"/billing-list-price-bases
"}id":"7","method":"GET","url":"/billing-period-starts
"}id":"8","method":"GET","url":"/billing-periods
"}id":"9","method":"GET","url":"/billing-rules
当我删除 endpoint 变量并将其更改为此时,例如
echo "{\"id\": \"$n\", \"method\": GET, \"url\": \"/application-rules\"}"
我得到了预期的输出
{"id": "0", "method": GET, "url": "/application-rules"}
{"id": "1", "method": GET, "url": "/application-rules"}
{"id": "2", "method": GET, "url": "/application-rules"}
{"id": "3", "method": GET, "url": "/application-rules"}
{"id": "4", "method": GET, "url": "/application-rules"}
{"id": "5", "method": GET, "url": "/application-rules"}
{"id": "6", "method": GET, "url": "/application-rules"}
{"id": "7", "method": GET, "url": "/application-rules"}
{"id": "8", "method": GET, "url": "/application-rules"}
{"id": "9", "method": GET, "url": "/application-rules"}
我做过的事情:
- 降级到较旧的 git bash 版本
- 在我的 Ubuntu WSL 中尝试过,但仍然遇到同样的错误。
- 尝试使用 JQ 和 printf 命令将输出格式化为 JSON 的不同方式,但问题仍然存在
- 脚本在具有相同 BASH 和 GIT BASH 版本的不同机器上运行良好
有人知道这个问题的原因以及如何解决这个问题吗?
【问题讨论】: