1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-10-23 04:30:24 +02:00

23562: add KSH_ZERO_SUBSCRIPT option and leave off by default

This commit is contained in:
Peter Stephenson 2007-06-18 13:25:03 +00:00
parent 5c44b0a472
commit abae4fe16e
17 changed files with 225 additions and 75 deletions

View file

@ -1244,6 +1244,31 @@ tt(readonly), are processed. Without this option, zsh will perform normal
word splitting after command and parameter expansion in arguments of an
assignment; with it, word splitting does not take place in those cases.
)
pindex(KSH_ZERO_SUBSCRIPT)
cindex(arrays, behaviour of index zero)
item(tt(KSH_ZERO_SUBSCRIPT))(
Treat use of a subscript of value zero in array or string expressions as a
reference to the first element, i.e. the element that usually has the
subscript 1. Ignored if tt(KSH_ARRAYS) is also set.
If neither this option nor tt(KSH_ARRAYS) is set, accesses to an element of
an array or string with subscript zero return an empty element or string,
while attempts to set element zero of an array or string are treated as an
error. However, attempts to set an otherwise valid subscript range that
includes zero will succeed. For example, if tt(KSH_ZERO_SUBSCRIPT) is not
set,
example(array[0]=(element))
is an error, while
example(array[0,1]=(element))
is not and will replace the first element of the array.
This option is for compatibility with older versions of the shell and
is not recommended in new code.
)
pindex(POSIX_BUILTINS)
item(tt(POSIX_BUILTINS) <K> <S>)(
When this option is set the tt(command) builtin can be used to execute

View file

@ -96,6 +96,14 @@ Subscripts may be used inside braces used to delimit a parameter name, thus
option is set, the braced form is the only one that works, as bracketed
expressions otherwise are not treated as subscripts.
If the tt(KSH_ARRAYS) option is not set, then by default accesses to
an array element with a subscript that evaluates to zero return an
empty string, while an attempt to write such an element is treated as
an error. For backward compatibility the tt(KSH_ZERO_SUBSCRIPT)
option can be set to cause subscript values 0 and 1 to be equivalent; see
the description of the option in ifzman(zmanref(zshoptions))\
ifnzman(noderef(Description of Options)).
The same subscripting syntax is used for associative arrays, except that
no arithmetic expansion is applied to var(exp). However, the parsing
rules for arithmetic expressions still apply, which affects the way that
@ -233,26 +241,22 @@ print ${array[(R)$key2]})
item(tt(R))(
Like `tt(r)', but gives the last match. For associative arrays, gives
all possible matches. May be used for assigning to ordinary array
elements, but not for assigning to associative arrays.
On failure the empty string is returned.
elements, but not for assigning to associative arrays. On failure, for
normal arrays this has the effect of returning the element corresponding to
subscript 0; this is empty unless one of the options tt(KSH_ARRAYS) or
tt(KSH_ZERO_SUBSCRIPT) is in effect.
)
item(tt(i))(
Like `tt(r)', but gives the index of the match instead; this may not be
combined with a second argument. On the left side of an assignment,
behaves like `tt(r)'. For associative arrays, the key part of each pair
is compared to the pattern, and the first matching key found is the
result.
On failure, a value one past the end of the array or string is returned.
result. On failure substitutes one more than the last currently
valid index, as discussed under the description of `tt(r)'.
)
item(tt(I))(
Like `tt(i)', but gives the index of the last match, or all possible
matching keys in an associative array.
On failure the value 0 is returned. If the option tt(KSH_ARRAYS) is in
effect, the subscript is still 0 for a failed match; this cannot be
distinguished from a successful match without testing tt(${array[0]})
against the pattern.
matching keys in an associative array. On failure substitutes 0.
)
item(tt(k))(
If used in a subscript on an associative array, this flag causes the keys