使用 cURL 发送 JSON 时如何保留换行符?

How to preserve line breaks when sending JSON using cURL?

以下几乎可以工作,但 message 属性 中的换行符未保留。

output="$(ls -la /home/john | gpg --armor --encrypt --recipient john@example.net)"
curl \
  --request POST \
  --url https://api.example.net/sendmail \
  --header 'Content-Type: application/json' \
  --data @- << EOF
{
  "subject": "Test",
  "message": "$output"
}
EOF

感谢您的帮助!

您需要用 \n 替换 JSON 字符串中的所有换行符:

message=${message//$'\n'/\n}

但是,我建议使用像 jq 这样的实用程序,而不是像这样的临时代码。您还需要转义字符串中的双引号和反斜杠,并将 non-ASCII 个字符转换为 \u#### 个转义序列。