zsh 中使用curl 时出错?

A.D*_*mas 0 zsh curl

我想在 zsh 中运行curl 命令。

curl -X GET "https://api.cloudflare.com/client/v4/zones/<ZONE>" \ 
-H "Content-Type:application/json" \ 
-H "Authorization: Bearer <TOKEN>"
Run Code Online (Sandbox Code Playgroud)

但是当运行这个我得到

{"success":false,"errors":[{"code":9106,"message":"Missing X-Auth-Email header"},{"code":9107,"message":"Missing X-Auth-Key header"}],"messages":[],"result":null}curl: (3) URL using bad/illegal format or missing URL
zsh: command not found: -H
zsh: command not found: -H
Run Code Online (Sandbox Code Playgroud)

除了错误响应之外。为什么到我zsh: command not found: -H这里就意味着该选项-H被忽略了。

Kam*_*ski 8

代码中的每个\字符都会转义后面的空格字符。转义空格的行为类似于带引号的空格。您的代码不仅会生成空格单词(而且您不想要这些单词)。反斜杠转义空格,因此它们不会转义换行符。实际上,您的代码由三个单独的命令组成;其中两个以-H和 开头,毫无意义。就好像你运行:

curl -X GET "https://api.cloudflare.com/client/v4/zones/<ZONE>" ' '
-H "Content-Type:application/json" ' '
-H "Authorization: Bearer <TOKEN>"
Run Code Online (Sandbox Code Playgroud)

这里的空格被引用,在您的代码中它们被转义。结果是相同的。

要在下一行继续执行命令,您需要转义换行符。

删除字符后面的空格\。两个反斜杠中的每一个都应该紧接在各自的换行符之前。然后这三行将被解释为一个命令。

这不是特定于zsh.