I just noticed something.  My big array has ten named elements but if I print it: printf  "%-20s %s\n" ${(kv)main} > /dev/pts/2 width               90 window            main offset               0 topE                 1 active              1 90                    main bottomE           48 lastE                196 hight                48 196                  48 List                  1 0                     1 list                  List 1                     48 currentE          1 ... it all works, however 'elements' 90, 196, 0 and 1 seem to have created themselves, I didn't make them.  They seem to be ghosts who's names are other element's values, eg: '90' is the value proper value of 'width' and that element holds the value 'main' which is the proper value of 'window' and so on.  It doesn't seem to break anything, however it's a bit strange when you print it out.  Something unintended in the printf?