Necesito iterar en una matriz y expandir la matriz mientras itero. ¿Cómo lo hago en BASH?
Por ejemplo:
req="a b c d"
read -a MODULES <<<$req
for MODULE_NAME in "${MODULES[@]}"; do
echo $MODULE_NAME
if something-happens-only-one-time; then
MODULES+=( "e" )
fi
done
Quiero obtener el siguiente resultado:
a
b
c
d
e
Editar:
El siguiente código funciona por ahora:
i=0
while true; do
MODULE_NAME="${MODULES[$i]}"
echo ${MODULE_NAME}
if something-happens-only-one-time; then
MODULES+=( "e" )
fi
i=$((i+1))
num_of_modules=${#MODULES[@]}
if (("$i" >= "$num_of_modules")) ; then
break
fi
done
Respuestas:
No funciona con un
for ... in "${arr[@]}"
bucle porque"${arr[@]}"
Se evalúa de inmediato. Es decir, aunque le agregue elementos durante el ciclo, el rango del ciclo ya está determinado y no se verá afectado.Podrías reescribir como una cuenta
for
lazo:Esto funciona porque
${#MODULES[@]}
en la condición de bucle se reevalúa en cada ciclo de bucle. Así que después de que se agrega un valor durante el bucle, Luego, al comienzo del siguiente ciclo, el valor de${#MODULES[@]}
se incrementará en 1.fuente