On Wed, 6 Sep 2023, 01:46 Kerin Millar, <k...@plushkava.net> wrote:

> My pet name for it is arrayshock.
>
> $ arr=(foo bar baz)
> $ export arr
> $ env | grep ^BASH_ARRAY_
> BASH_ARRAY_arr%%=([0]="foo" [1]="bar" [2]="baz")
> $ ./bash -c 'declare -p arr'
> declare -ax arr=([0]="foo" [1]="bar" [2]="baz")
>

I've often wondered why it was designed this convoluted way, rather than
simply putting separate items into the environment, thus:

arr=foo
arr[0]=foo # both of these have reasonable justifications and reasonable
repudiations; choosing one is a different discussion
arr[1]=bar
arr[2]=baz
arr-=a # maybe, to indicate declare -a.

I vaguely recall that there was some notion that POSIX required "only valid
C identifiers" (alphanumeric and underscore but without a leading digit) to
the left of "=", but in that case the current scheme using "%%" is not
compliant either.

-Martin

>

Reply via email to