Dos cosas, primero esta es mi primera pregunta en este foro y me disculpo si el formateo está por todos lados. En segundo lugar, no he escrito tantos scripts bash, y suele pasar bastante tiempo entre los scripts que produzco.
Dicho esto, esta es mi pregunta.
¿Es posible hacer algo como esto en bash (Claro arreglo $ array contiene):
$array=()
Básicamente esto es lo que me gustaría hacer. Tengo una variable con nombres de variable de matriz en ella:
array1=()
array2=()
arrayList="array1 array2"
# In a function far far away
for array in $arrayList
do
eval arr=("\"\${$array[@]\"")
for index in ${!arr[@]}
do
echo "${arr[$index]}"
done
# Here is the big "?", I like to clear the array that $array refers to.
$array=()
done
Mis matrices contienen cadenas que incluyen "" (espacio) y es por eso que utilizo la declaración
eval
. No estoy seguro de que sea necesario, pero al menos está funcionando. El script funciona más o menos como yo quiero, pero necesito borrar las matrices en el $arrayList
, y prefiero no codificarlo en alguna parte, aunque sería fácil.
Gracias de antemano.
Ver http://mywiki.wooledge.org/BashFAQ/048 re: el uso de eval - la forma abreviada es que realmente no es una práctica recomendada. –
¡Gracias por el enlace! Leí que 'eval 'no es una forma recomendable de hacerlo, ya que puedes inyectar cosas malas en él, o incluso hacer algunas cosas estúpidas si no tienes cuidado con lo que" evelles ". Consideraré cambiarlo por otra solución, aunque este script solo lo usaré yo. – Qben
Quizás lo que realmente quieres son matrices asociativas. Están disponibles en bash 4. – Dunes