The cd command (chdir) cannot be implemented as an external. It must be a shell built-in in order to be useful. (That's because it changes the shell's own process state). For similar reasons the read and export and set commands must also built-ins.
–
Jim DennisApr 4 '10 at 20:06

In most UNIX shells (csh, bash, zsh) aliases are a form of expansion. Thus they are not parsed like functions. Any word in the interactive input stream which would be processed as a command will be scanned against the list of aliases and a simple string replacement will be performed (usually before any other forms of expansion).

If you need to process arguments then you want to define a function which is parsed and processed rather than simply being expanded like a macro.