mirror of
git://git.code.sf.net/p/zsh/code
synced 2024-11-19 13:33:52 +01:00
61 lines
2.7 KiB
Plaintext
61 lines
2.7 KiB
Plaintext
Last updated: Tue Aug 7 08:44:03 PDT 2001 -*- text -*-
|
|
|
|
In this file we maintain a list of "standard shell features" (many of them
|
|
proposed as POSIX extensions by David Korn and the shell@research.att.com
|
|
mailing list) that will require changes to zsh behavior for compatibility.
|
|
|
|
This file is not part of the packaged zsh distribution.
|
|
|
|
Syntax and Parsing
|
|
------------------
|
|
|
|
Redirections following a function body definition should be considered
|
|
part of the function definition, and positional parameter references in
|
|
those redirections refer to the function's positionals.
|
|
|
|
Subscript brackets do not imply double-quoting and in fact other quotings
|
|
are respected when inside the brackets. (The exact syntax of associative
|
|
array subscripts has not been decided as of this writing.)
|
|
|
|
The "typeset" builtin and its synonyms are language keywords and apply
|
|
assignment syntax to their argument lists. (This violates POSIX?)
|
|
|
|
Equals signs are special inside the parens in a name=(...) assignment:
|
|
- name=( [x]=a [y]=b ) is the same as name[x]=a name[y]=b
|
|
- name=( x=(a b c) y=(e f g) ) is a compound assignment (semantics not
|
|
yet agreed upon as of this writing, and might not be standardized).
|
|
|
|
Positional parameter references may not go higher than 9 in POSIX shell
|
|
emulation; that is, $12 should be ${1}2, not ${12}.
|
|
|
|
|
|
Semantics
|
|
---------
|
|
|
|
Zsh's handling of "precommand modifiers" is completely unlike anything
|
|
done by any other shell.
|
|
- "noglob" and "nocorrect" are impossible and should not be treated as
|
|
special words when emulating a standard shell.
|
|
- "builtin", "command", and "exec" are true commands in other shells, and
|
|
as such take command line options etc., which is not possible with the
|
|
special rules zsh uses for these commands.
|
|
|
|
POSIX requires that shell functions behave like macros, but does not have
|
|
the "function name { ..." syntax. Ksh uses the latter as an indicator
|
|
that extended function semantics are allowed.
|
|
- The value of $0 behaves as if FUNCTION_ARGZERO in "function name()", but
|
|
never does so in bare "name()" syntax functions.
|
|
- Local variables are statically scoped in the "function" form, but all
|
|
variables are global in the POSIX form. (Zsh uses local dynamic scope.)
|
|
- XTRACE is always local and turned off in the "function" form, unless
|
|
explicitly enabled with "typeset -ft".
|
|
|
|
Ksh automatically searches FPATH for any command not found in PATH, and
|
|
autoloads the file if found. The "autoload" command is only required if
|
|
you want FPATH to be searched before PATH, e.g. because the function has
|
|
the same name as a command in PATH.
|
|
|
|
Autoloading should work more like "source" when kshautoload is active.
|
|
In particular, aliases defined in the autoloaded file should be expanded
|
|
when referenced later in the same file (even when using "autoload -U").
|