La page de manuel Bash décrit l'utilisation de ${!a}
pour renvoyer le contenu de la variable dont le nom est le contenu de a
(un niveau d'indirection).
Je voudrais savoir comment retourner tous les éléments d'un tableau à l'aide de ceci, c'est-à-dire
a=(one two three)
echo ${a[*]}
Retour
one two three
Je voudrais pour:
b=a
echo ${!b[*]}
pour retourner le même. Malheureusement, ce n'est pas le cas, mais revient à la 0
place.
Mise à jour
Compte tenu des réponses, je me rends compte maintenant que mon exemple était trop simple, car bien sûr, quelque chose comme:
b=("${a[@]}")
Réalisera exactement ce dont j'avais besoin.
Alors, voici ce que j'essayais de faire:
LIST_lys=(lys1 lys2)
LIST_diaspar=(diaspar1 diaspar2)
whichone=$1 # 'lys' or 'diaspar'
_LIST=LIST_$whichone
LIST=${!_LIST[*]}
Bien sûr, une lecture attentive de la page de manuel de Bash montre que cela ne fonctionnera pas comme prévu car la dernière ligne renvoie simplement les indices du "tableau" $_LIST
(pas du tout un tableau).
Dans tous les cas, ce qui suit devrait faire le travail (comme indiqué):
LIST=($(eval echo \${$_LIST[*]}))
ou ... (l'itinéraire que j'ai suivi, finalement):
LIST_lys="lys1 lys2"
...
LIST=(${!_LIST})
En supposant, bien sûr, que les éléments ne contiennent pas d'espace.
[@]
au pointeur_LIST="LIST_${whichone}[@]"
, puis utilisezLIST=("${!_LIST}")
pour copier le tableau. C'est une bonne idée d'utiliser des noms de variable en minuscule pour éviter les conflits avec les variables d'environnement (toutes majuscules).