zsh tem substituição de parâmetro diferente do Bash, que está documentado em man zshexpn . Ele suporta uma variedade de modificadores para o comportamento de expansão , que são colocados entre parênteses antes o nome da variável: ${(X)name} . O modificador para incluir chaves de matriz (incluindo matrizes associativas) é k : ${(k)array} expande para a lista de chaves na matriz, exceto que se uma chave for a cadeia vazia, ela será omitida. Use aspas duplas e o modificador @ para manter a chave vazia.
for x in "${(@k)array}" ; ...
fará um loop pelas chaves da matriz array .