Mac のターミナル(zsh)で "$ID:w" の :w が消える:変数の後ろの「:」は加工の記号
Mac のターミナル(zsh)で "$ID:wrong-password" を curl に渡したら、ID の後ろが ong-password になりました。zsh では、変数名のすぐ後ろの :w や :r が修飾子(modifier。変数を加工する記号)として読まれます。${ID} のように { } で囲むと防げます。

Mac のターミナル(zsh)で、変数のすぐ後ろに「:」を書いたら、文字の一部が消えました。原因は、zsh では変数名のすぐ後ろの「:」と1文字が、修飾子(modifier。変数の中身を加工する記号)として読まれることでした。変数名を ${ID} のように { } で囲めば防げます。
zsh で、変数の後ろの「:w」が消えた
確認用のサイトで、間違ったパスワードでは開けないことを確かめようとしました。ID を変数に入れ、パスワードの代わりに wrong-password を付けて、curl に渡しました。
Macで実行
ID=(本物の ID)
curl -s -o /dev/null -w '%{http_code}\n' -u "$ID:wrong-password" https://staging.example.com/
原因::w と :r は、変数を加工する記号
zsh では、$変数名 のすぐ後ろに「:」と決まった1文字を書くと、変数の中身を加工する記号(修飾子)として読まれます。たとえば :r は「拡張子を取り除く」、:h は「最後の / より前を残す」といった意味です。

"$ID:wrong-password" では、:w と :r が加工の記号として読まれて消え、残った ong-password が、加工した ID の後ろにくっついていました。


直し方:変数名を { } で囲む


まとめ

- zsh では、$変数名 のすぐ後ろの「:」と1文字が、変数を加工する記号として読まれる
- "$ID:wrong-password" では :w と :r が消え、ID の後ろに ong-password がくっついた
- "${ID}:wrong-password" のように { } で囲めば防げる
この記事は、AI(Claude)の支援を受けて作成し、筆者が内容を確認しています。


