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?