zsh で curl コマンドを実行したいです。
curl -X GET "https://api.cloudflare.com/client/v4/zones/<ZONE>" \
-H "Content-Type:application/json" \
-H "Authorization: Bearer <TOKEN>"
しかしこれを実行すると
{"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
エラー応答以外にも、zsh: command not found: -H
オプション-H
が無視されることを意味するものがなぜ表示されるのでしょうか。
答え1
コード内の各 は\
、後続のスペース文字をエスケープします。エスケープされたスペースは、引用符で囲まれたスペースのように動作します。コードがスペースである単語を生成するだけでなく (これらの単語は不要です)、バックスラッシュはスペースをエスケープするため、改行文字をエスケープしません。実際には、コードは 3 つの別々のコマンドで構成されています。そのうちの 2 つは で始まり-H
、意味をなさないものです。次のように実行した場合:
curl -X GET "https://api.cloudflare.com/client/v4/zones/<ZONE>" ' '
-H "Content-Type:application/json" ' '
-H "Authorization: Bearer <TOKEN>"
ここではスペースが引用符で囲まれていますが、コードではエスケープされています。結果は同じです。
次の行にコマンドを続けるには、改行文字をエスケープする必要があります。
文字の後のスペースを削除します\
。2つのバックスラッシュはそれぞれすぐにそれぞれの改行文字の前に置きます。すると、3 行が 1 つのコマンドとして解釈されます。
これは に固有のものではありませんzsh
。