Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: zsh precommand modifiers stop accepting argument if quoted



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 <schaefer@xxxxxxxxxxxxxxxx>
wrote:

> On Wed, Mar 29, 2017 at 11:00 PM, Cuong Manh Le
> <cuong.manhle.vn@xxxxxxxxx> 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.
>


Messages sorted by: Reverse Date, Date, Thread, Author