Quiero escribir un script para hacer referencia a múltiples matrices de otra matriz que contiene los nombres de las variables de estas.
Aquí está mi código hasta ahora:
#!/bin/bash
array1=('array1string1' 'array1string2')
array2=('array2string1' 'array2string2')
array_names=('array1' 'array2')
for a in ${array_names[@]}
do
        for b in ${a[@]}
        do
                echo $b
        done
doneMe gustaría que la salida escanee a través de ambas matrices (desde el bucle externo) e imprima las cadenas respectivas en el bucle interno que llama echo. Mi salida actual solo me muestra:
array1
array2Le agradecería cualquier sugerencia con respecto a esto. ¡Gracias!
                    
                        bash
                                shell-script
                                
                    
                    
                        chnppp
fuente
                
                fuente

for b in "${array1[@]}" "${array2[@]}"; do ...; done?${a[@]}a${!a}hacer lo que quiere (creo).${!a[@]}da una longitud de la matriza.${!a}es solo darme los primeros elementos.Respuestas:
Bash 4.3 y posterior admite "referencias de nombre" o namerefs (existe un concepto similar
ksh93, pero el alcance es muy diferente ):La variable
arres un nameref que actúa como un alias para la variable nombrada (la variable con nombre$aen este ejemplo).Sin namerefs, en versiones anteriores de Bash, una solución sería crear una nueva matriz que contenga todos los elementos de las otras matrices:
... un poco como la
array_namesmatriz en la pregunta pero con el contenido de todas las matrices, y luego repetir"${all[@]}".También es posible usarlo
eval, pero el código resultante se ve increíblemente horrible.Vea la respuesta de Glenn Jackman para una variación con indirección variable (introducida en su forma actual con Bash versión 2).
fuente
@Kusalananda tiene la mejor respuesta para versiones recientes de bash. Para versiones anteriores, puede usar una variable indirecta:
Vea el cuarto párrafo de https://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion
fuente
Como una variación de lo que se ha dicho:
Accediendo a los elementos por índice
fuente