On Tue, Oct 17, 2023 at 04:46:22AM +0200, Christoph Anton Mitterer wrote:
> But why does it even try to evaluate the subscript "key" as arithmetic
> expression?

Because that's how indexed arrays work.  Everything inside the square
brackets is an arithmetic expression, and in an arithmetic context,
bash treats anything that *can* be parsed as a variable name as a
variable name.

    unicorn:~$ unset -v a b c array
    unicorn:~$ a=b b=c c=42 array[a]=foo; declare -p array
    declare -a array=([42]="foo")

> Yes it's defined for indexed arrays, but shouldn't it already know that
> there is no indexed array of the name "array" and any evaluation of the
> subscript is thus pointless?

There are two undefined variables at that point, and bash chooses one
of them to report.  Prioritizing "the important error" over "the less
important error" is not something that compilers/interpreters are good
at, generally.  If you have multiple errors, you may get a report of
both of them, or just one, which masks the second one.  You'll have
to fix both of them to get the correct result anyway, so it doesn't
really matter which one gets reported and fixed first.

Reply via email to