Pourquoi les modificateurs de précommand zsh cessent d'accepter des arguments s'ils sont cités?

zsh a des modificateurs de précommand, qui précèdent une command pour modifier l'interprétation de la command. Certains d'entre eux sont la command et l' exec .

 $ zsh -c 'exec -a foo zsh -c "print -- \$0"' foo $ zsh -c 'command -v ls' /bin/ls 

Mais ils ont cessé d'accepter des arguments s'ils étaient cités:

 $ zsh -c '\exec -a foo zsh -c "print -- \$0"' zsh:1: command not found: -a $ zsh -c '\command -v ls' zsh:1: command not found: -v 

Sonne comme les a cité les faisant courir immédiatement sans traiter d'autres arguments.

Il empêche l'alias de prévenir la command nommée ou exec de l'expansion est impossible.

Est-ce un bug ou une fonctionnalité? Est-ce documenté quelque part?

Zsh parsing les modificateurs de précommand de la même manière que les alias et les mots-keys: ils doivent être au début d'une command, sans guillemets. Ceci est à peu près nécessaire pour les modificateurs qui affectent l'parsing de la command ( noglob , nocorrect ). Les modificateurs de builtin , command , exec utilisent la même logique en interne même s'ils peuvent être interprétés autrement.

Pour autant que je sache, il n'y a pas de raison profonde pour cette logique, juste que cela a été fait de cette façon il y a quelques décennies et personne n'a pris suffisamment soin de ce cas limite pour y remédier.

Étant donné que quelque chose comme \command -v ls ne fait rien de sensible, c'est définitivement un bug.