Lo que debe funcionar, suponiendo que tiene una versión de Bash que admita matrices asociativas para empezar.
Si puedo tomar una conjetura salvaje. . . ¿está ejecutando algo como esto:
command_that_outputs_keys \
| while read data; do
results[$data]=1
done
? ¿Eso es — es su while
parte del lazo de una tubería? Si es así, entonces que es el problema. Usted ve, cada comando en una tubería recibe una copia del entorno de ejecución del shell. Por lo tanto, el bucle while
rellenaría una copia de la matriz results
, y cuando se complete el bucle while
, esa copia desaparecerá.
Editado para añadir: Si eso es el problema, entonces como glenn jackman puntos en un comentario, lo puede solucionar mediante el uso de process substitution lugar:
while read data; do
results[$data]=1
done < <(command_that_outputs_keys)
De esa manera, aunque command_that_outputs_keys
recibirán solo una copia del entorno de ejecución del shell (como antes), el bucle while
tendrá el entorno principal original, por lo que puede modificar el conjunto original.
¿Qué versión de bash estás usando? – siride