On 27 Jun 2011, at 16:25, Chet Ramey wrote: > >> I don't even understand what the second one is supposed to mean at >> all -- the :1: means to start with "b" and the -2 means to go back 2 >> elements...? How do you derive "a c" from any possible interpretation >> of this? > > I assume that he wants to be able to treat an indexed array as a circular > buffer without having to do any of the work in a script.
Exactly, let's draw the array in the example: arr=(a b c) values: [ a | b | c ] indexes: 0 1 2 3 If you expand ${arr[@]:1:2}, you get the following: values: [ a | b | c ] indexes: 0 1 2 3 expand: [ 1 2 ] => b c ^ start from 1 ^ length 2 I propose we let a negative length iterate backward, so with ${arr[@]:1:-2}, you get the following: values: [ a | b | c ] indexes: 0 1 2 3 expand: 1 ] [ 2 => a c ^ start from 1 ^ length 2 Since ${arr[-1]} already does exactly this, I figure it would merely add to the syntax' consistency.