So there no way to prevent an alias named "command" to expand without breaking the script? In other Bourne-like shell, once can do: \builtin command -v ls but it's just broken in zsh. It doesn't work even in sh, ksh emulation, so making zsh non-compliant there. >From user perspective, it's definitely a bug. Cuong Manh Le https://cuonglm.xyz On Fri, Mar 31, 2017 at 5:42 AM, Bart Schaefer wrote: > On Wed, Mar 29, 2017 at 11:00 PM, Cuong Manh Le > wrote: > > > > $ 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 > > > > Is this behavior a feature or a bug? it it documented somewhere? > > There's no promise that precommand modifiers will work at all when > quoted. They're syntactic tokens, so if you quote them they become > different tokens. It just happens that "exec" and "command" are both > implemented as builtins, so the quoted forms can still be looked up > and run that way, but if you have changed the token then the > corresponding syntax rules do not apply. > > This is similar to the way that "typeset" as a reserved word differs > from "typeset" as a builtin command. The typeset dichotomy was > introduced a lot more recently and so is more carefully documented -- > there's probably a doc clarification that could be made for the > precommand modifiers. >