La página de manual de Bash describe el uso de ${!a}para devolver el contenido de la variable cuyo nombre es el contenido de a(un nivel de indirección).
Me gustaría saber cómo devolver todos los elementos en una matriz usando esto, es decir,
a=(one two three)
echo ${a[*]}
devoluciones
one two three
Me gustaria para:
b=a
echo ${!b[*]}
para devolver lo mismo. Desafortunadamente, no lo hace, pero regresa en su 0lugar.
Actualizar
Dadas las respuestas, ahora me doy cuenta de que mi ejemplo era demasiado simple, ya que, por supuesto, algo así como:
b=("${a[@]}")
Logrará exactamente lo que dije que necesitaba.
Entonces, esto es lo que estaba tratando de hacer:
LIST_lys=(lys1 lys2)
LIST_diaspar=(diaspar1 diaspar2)
whichone=$1 # 'lys' or 'diaspar'
_LIST=LIST_$whichone
LIST=${!_LIST[*]}
Por supuesto, leer cuidadosamente la página de manual de Bash muestra que esto no funcionará como se esperaba porque la última línea simplemente devuelve los índices de la "matriz" $_LIST(no una matriz en absoluto).
En cualquier caso, lo siguiente debería hacer el trabajo (como se señaló):
LIST=($(eval echo \${$_LIST[*]}))
o ... (la ruta que tomé, eventualmente):
LIST_lys="lys1 lys2"
...
LIST=(${!_LIST})
Suponiendo, por supuesto, que los elementos no contienen espacios en blanco.
[@]al puntero_LIST="LIST_${whichone}[@]"y luego, useLIST=("${!_LIST}")para copiar la matriz. Es una buena idea usar nombres de variables en minúsculas para evitar conflictos con las variables de entorno (mayúsculas).