#!/bin/bash ## bash4 due to associative arrays! function cp_hash() { ## REQUIRES you to declare -A $2 in advance. local original_hash_name="$1" local copy_hash_name="$2" # # sadly we have no way to identify if you have already declared it, so bull ahead. # ## store the definition of the old array local __copy__=$(declare -p $original_hash_name) ## rename the array inside the definition __copy__=${__copy__/${original_hash_name}=/__copy__=} ## for bash 4.2 > we could end here. ## declare -A creates local scope variables by default, so add -g ## this DOES NOT work prior to 4.2, even w/o -g and w/ a declare outside. # __copy__=${__copy__/${original_hash_name}=/${copy_hash_name}=} # eval ${__copy__/-A/-g -A} ## for bash4 where we can't do -g, then: ## local associative array based on the definition we stored and modified eval ${__copy__} ## loop through the local copy, and store it in the declared-outside copy. for i in "${!__copy__[@]}" do eval ${copy_hash_name}[$i]=${__copy__[$i]} done } declare -A hash hash[hello]=world hash[ab]=cd #not required for 4.2+ if you use -g, neither helps nor hinders declare -A copy cp_hash 'hash' 'copy' echo hash: ${hash[@]} echo copy: ${copy[@]} echo "copy result loop" for i in "${!copy[@]}" do echo "key : $i | value: ${copy[$i]}" done