ormaaj 1395676370 learn # typeset -a a=(a b c c d d d e f); o=$(typeset -p a); typeset -A vals; for key in "${!a[@]}"; do vals[${a[key]}]= ${vals[${a[key]}]+unset -v 'a[key]'}; done; printf 'before: %s\nafter: %s\n' "$o" "$(typeset -p a)" ormaaj 1395677219 forget ormaaj 1395677244 learn # typeset -a a=(a b c c d d d e f); o=$(typeset -p a); typeset -A vals; for key in "${!a[@]}"; do vals[${a[key]}]= ${vals[${a[key]}]+command unset -v 'a[key]'}; done; printf 'before: %s\nafter: %s\n' "$o" "$(typeset -p a)" ormaaj 1395680802 forget ormaaj 1395680824 learn # typeset -a a=(a b c c d d d e f '' '' _ _); o=$(typeset -p a); typeset -A vals; for key in "${!a[@]}"; do ((vals[_${a[key]}]++)) && unset -v 'a[key]'; done; printf 'before: %s\nafter: %s\n' "$o" "$(typeset -p a)"