Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: bash conversion trouble.
2017-02-25 09:02:18 -0800, Bart Schaefer:
> On Feb 25, 8:24am, Ray Andrews wrote:
> }
> } Just curious: why would that have been changed?
>
> This comes from zsh's original heritage as a bourne-shell-like shell
> intended for students who were trained on BSD csh. Also this happened
> before ksh was widely available outside an AT&T research lab so there
> was no bourne-shell array syntax to "change".
>
> Exactly why csh adopted 1-based arrays is probably lost to history at
> this point, but I suspect the argument goes something like this.
[...]
See also
https://unix.stackexchange.com/questions/252368/is-there-a-reason-why-the-first-element-of-a-zsh-array-is-indexed-by-1-instead-o/252405#252405
pasted below for convenience:
- Virtually all shell arrays (Bourne, csh, tcsh, fish, rc, es,
yash) start at 1. ksh is the only exception that I know (bash
just copied ksh).
- Most interpreted languages at the time (early 90s): awk, tcl
at least, and tools typically used from the shell (cut -f1-3,
head -n 3, sort -k1,3, cal 1 2015, comm -1) start at 1. sed,
ed, vi number their lines from 1...
- zsh takes the best of the Bourne shell and csh. The Bourne
shell array $@ start at 1. zsh is consistent with its handling
of $@ (like in Bourne) or $argv (like in csh). See how
confusing it is in ksh where ${@:0:1} does not give you the
first positional parameter for instance.
- A shell is a user tool before being a programming language. It
makes sense for most users to have the first element in $a[1].
It also means that the number of elements is the same as the
last indice (in zsh like in most other shells except ksh,
arrays are not sparse).
- a[1] for the first element is consistent with a[-1] for the
last.
So IMO the question should rather be: what got into David Korn's
head to make its arrays start at 0?
Messages sorted by:
Reverse Date,
Date,
Thread,
Author