Hi,

I would like to use dynamic names for arrays in a way compatible with bash 
versions delivered with Solaris since s9.

Here's a demonstration of what I try to do with two different bash versions:

## BASH 2.05.0(1)

$ bash --version
GNU bash, version 2.05.0(1)-release (sparc-sun-solaris2.9)
Copyright 2000 Free Software Foundation, Inc.

$ typeset name="NAME"
$ typeset -a arr_${name}=("one" "two");
$ set | grep arr_
_=$'arr_NAME=(one two)'
arr_NAME=([0]="one" [1]="two")

# ----

$ typeset -i i=0;
$ typeset -a arr_${name}[$((i++))]="one";
bash: typeset: arr_NAME: cannot assign to array variables in this way
$ typeset -a arr_${name}[$((i++))]="two";
bash: typeset: arr_NAME: cannot assign to array variables in this way

## ======

## BASH 3.2.25(1)

$ bash --version
GNU bash, version 3.2.25(1)-release (i386-pc-solaris2.11)
Copyright (C) 2005 Free Software Foundation, Inc.

$ typeset name="NAME"
$ typeset -a arr_${name}=("one" "two");
bash: syntax error near unexpected token `('
$ set | grep arr_
$

# ----

$ typeset -i i=0;
$ typeset -a arr_${name}[$((i++))]="one";
$ typeset -a arr_${name}[$((i++))]="two";
$ set | grep arr_
_='arr_NAME[1]=two'
arr_NAME=([0]="one" [1]="two")


My questions are:

- Are "dynamic array names" supposed to work at all or am I relying on some 
side 
effect of the parser here?
- Is there a better, more compatible way to achieve what I am trying to do?

Reply via email to