如何在 curl 命令的破双引号内格式化变量?

How do I format a variable inside the broken double quotes of a curl command?

我正在尝试通过更新我的收藏家的信息来测试 Sumo Logic API。第二个 curl 命令是导致问题的命令 'curl: (55) Failed sending PUT request'。它适用于我的终端,但不适用于 bash 脚本。

#!/bin/bash

readonly etag=$(curl -u '<accessId>:<accessKey>' -I -X GET https://api.sumologic.com/api/v1/collectors/<id> | grep -Fi etag | awk '{print }' | tr -d \''"\')

echo ${etag}

curl -vvv -u '<accessId>:<accessKey>' -X PUT -H "Content-Type: application/json" -H "If-Match: \"${etag}\"" -T updated_collector.json https://api.sumologic.com/api/v1/collectors/<id>

set -x

第一个 curl 命令被分配给名为 'etag' 的变量,该变量存储必要的 etag。在第二个 curl 命令中使用 etag 来请求更新存储在 'updated_collector.json' 中的信息。 updated_collector.json 文件不是问题,因为我已经通过终端成功更新了信息。我怀疑 content-type 没有在 header 中发送,因为有人 运行 脚本在他们的末端并且它没有显示带有 -vvv 标签的信息。

在这里您可以找到 Sumo Logic Collector API 方法和示例,我从中获得了用于测试 API 的 curl 命令:https://help.sumologic.com/APIs/Collector-Management-API/Collector-API-Methods-and-Examples

更新:我获取了 etag,然后 运行 bash 脚本中的第二个命令。我手动将 etag 插入到第二个 curl 命令的 ${etag} 部分。然后我 运行 脚本成功了。因此,第二个 curl 命令中的 etag 变量格式不正确。我不知道如何解决这个问题。

问题部分出在语法上,但修复后,我仍然遇到错误。 "If-Match: \"${etag}\" 在我的命令中应该是 "If-Match: ${etag}" 而不是。我必须添加 --http1.1 标志才能使其工作。我确定这是相扑逻辑问题。我可以使用 http2.0 毫无问题地执行 GET 请求。