社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
私信  •  关注

Benjamin W.

Benjamin W. 最近创建的主题
Benjamin W. 最近回复了
6 年前
回复了 Benjamin W. 创建的主题 » Github API未分析多行shell变量

这个

{ "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 (第四段)。