On Sat, Dec 29, 2018, 1:44 PM Bize Ma <binaryze...@gmail.com wrote: > Chet Ramey (<chet.ra...@case.edu>) wrote: > > > On 12/23/18 12:01 PM, Bize Ma wrote: > > > {…} > > > > Both command line above should have printed "hello". > > > > No. 0 is the only valid subscript for a non-array variable. The > difference > > between bash and other shells that implement this feature is that bash > > warns about negative subscripts. > > > > If you say so: fine for me. > > It still irks me a little that a `${var[-1]}` isn't the "last value" > (sometimes!, consistency?). >
That consistency would demand that simple variables be treated exactly as array variables, but they aren't. The consistent part here is that they convert dynamically when indexed, and 0 is the only synonymous index if the variable would have been an array. A different index would demand two step conversion. And if bash would ever allow those inidices like the positive ones, it would only be for the sake of convenience, but that shouldn't be taken strictly. If you want consistency, stop treating non-array variables as array variables and write explicit declarations or conversions. Natural indices are fine, but special non-generic ones that are clearly just for arrays are not. > I haven't seen that documented anywhere, though. > Read the source code so you would undestand that arrays and non-arrays are different. >