eval
espera uma string como o argumento. Você não pode usar (
sem aspas, tem um significado especial no shell.
i=aaa
eval "$i=(1 2)" # Use a string, $i will expand in double quotes.
echo ${aaa[1]})
Você também pode usar declare
ou typeset
em vez de eval
:
declare -a $i='(1 2)'
Você ainda precisa citar os parênteses e espaços.
Para evitar eval
completamente, você pode atribuir um por um:
#! /bin/bash
name=aaa
values=(1 2)
for ((i=0; i<${#values[@]}; ++i)) ; do
read "$name[$i]" <<< "${values[i]}"
done
echo ${aaa[1]})