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

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

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