A very simple function to shuffle an array.
function zshuffle {
RANDOM=$$
local count array shuffled size index
integer count size index
typeset -a array shuffled
array=($*) # Limited to 32767 elements because $RANDOM
size=${(w)#array}
((size > 32767)) && {
print "Ops! too many big array"
return 1
}
while ((count++ < size))
do
index=$((1 + (${(w)#array} * RANDOM / 32767)))
shuffled+=($array[$index])
array[$index]=()
done
[ -n "$shuffled[*]" ] && print "$shuffled[*]" || return 1
}