Che cosa dovrebbe funzionare, supponendo che abbiate una versione di Bash che supporta gli array associativi per cominciare.
Se riesco a indovinare. . . stai eseguendo qualcosa del genere:
command_that_outputs_keys \
| while read data; do
results[$data]=1
done
? Quello è — è la parte del ciclo while
di una pipeline? Se è così, allora che il problema è. Vedete, ogni comando in una pipeline riceve una copia dell'ambiente di esecuzione della shell. Quindi il ciclo while
popolerà una copia della matrice results
e al termine del ciclo while
, la copia scompare.
A cura di aggiungere: Se questo è il problema, poi come glenn jackman punti in un commento, si può risolvere il problema utilizzando process substitution invece:
while read data; do
results[$data]=1
done < <(command_that_outputs_keys)
In questo modo, anche se riceveranno command_that_outputs_keys
solo una copia dell'ambiente di esecuzione della shell (come prima), il ciclo while
avrà l'ambiente principale originale, quindi può modificare l'array originale.
Quale versione di bash stai usando? – siride