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

Re: strange alias effects



On May 29, 12:27pm, Andy Spiegl wrote:
} Subject: Re: strange alias effects
}
} Bart Schaefer wrote,
} 
} > Did you happen to compile your dot-files with zcompile?
} No, never used that.
} And the same dot-files worked perfectly with 3.1.6.pws21.
} 
} > It's the same problem as "Bart Schaefer's rule" in FAQ 2.3

I misspoke slightly there.  It's the same as *the reason for* the rule,
which says:

 Define first those aliases you expect to use in the body of a function,
 but define the function first if the alias has the same name as the
 function.

On May 29,  3:32pm, Sven Wischnowsky wrote:
} Subject: Re: strange alias effects
}
} It was always the case that syntactical constructs like if/then/else
} and loops were parsed completely.  [...]  When it is executed, the alias
} is defined, but in this case the functions are already parsed, too.

And the effect of zcompile is that the entire file is parsed as one big
syntactic construct, so no aliases defined within the file are expanded
within the file. [*]

[*] Unless you first "source" the file to define them, and then compile
it with*out* using -U ... but that can also have unexpected results if
you have global aliases (alias -g).

Sven went on:
} It isn't special to zsh, either. All shells (have to) behave this way.

Csh doesn't, but then csh doesn't have functions.  Csh (the original one
from the old BSD Unix) parses and executes syntactic constructs in the
same pass; loops are, in effect, implemented with fseek.  It used to be
possible to create some pretty entertaining csh scripts that rewrote the
script file in place while it was executing.

-- 
Bart Schaefer                                 Brass Lantern Enterprises
http://www.well.com/user/barts              http://www.brasslantern.com

Zsh: http://www.zsh.org | PHPerl Project: http://phperl.sourceforge.net   



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