这个
{ "a": "b
c" }
是无效的JSON,因为字符串不能包含换行符等控制字符。
如果有包含换行符的字符串,可以将其转换为
\n
使用外壳参数扩展:
$ var='a
b'
$ echo "$var"
a
b
$ echo "${var//$'\n'/'\n'}"
a\nb
因此,要将字符串输入到JSON对象中,请使用
"body": "'"${MIGRATION_DOCUMENT//$'\n'/'\n'}"'"
在JSON对象的末尾。
此外,如果在单引号中使用行继续符,例如
var='abc \
def'
然后反斜杠和换行符是文字:
$ echo "$var"
abc \
def
不要像在单引号字符串中那样使用换行符。
总而言之:
curl -i \
-H "Authorization: token ${PERSONAL_ACCESS_TOKEN}" \
-d '{"tag_name": "'"${TAG_NAME}"'", "name": "'"${VERSION_BUMP}"'", "body": "'"${MIGRATION_DOCUMENT//$'\n'/'\n'}"'"}' \
https://github.deere.com/api/v3/repos/randomOrg/testRepo/releases
如果您真的想这样做,您仍然可以使用行继续符,但它必须在双引号上下文中:
curl -i \
-H "Authorization: token ${PERSONAL_ACCESS_TOKEN}" \
-d '{"tag_name": "'"${TAG_NAME}"'", "name": "'"${VERSION_BUMP}"'", '"\
"'"body": "'"${MIGRATION_DOCUMENT//$'\n'/'\n'}"'"}' \
https://github.deere.com/api/v3/repos/randomOrg/testRepo/releases
作为补充说明,不应将所有大写名称都用于变量;这些名称是为环境变量保留的,请参见
the POSIX spec
(第四段)。