(ins)ormaaj 12 (198294) 0 ~/doc/gentoo $ echo; ( bash /proc/self/fd/9 9<<\_EOF ) #!/usr/bin/env bash shopt -s lastpipe extglob expand_aliases function copy_array { ((1 + ${#} % 2)) || return typeset k l q r s t typeset -a v=(src ret) IFS= read -d '' t <<-\EOF [ "${!r}" = "$1" ${| unset -n r; } ]; \ typeset -Gn r=${v[$((l=$?))]}; \ printf '%s[%q]=%q\\n' "${!r}" "$k" "${src[$k]}"; \ typeset -p "${!src}" "${!ret}" \ EOF t=r[\${\|${t}\;}\${k}] s=$t typeset -n s r=src shopt -s localvar_unset while typeset -n r ret src src=$2 ret=$1 for k in "${!src[@]}"; do s=$s done command shift 2 ${1+\:} false do unset -n -- "${v[@]}" done shopt -u localvar_unset } function m { typeset -gx BASH_COMPAT=51; local -; set +m typeset -A a x=([0]=1 [2]=3 [4]=5) typeset -a b y=([0]=1 [2]=3 [4]=5) copy_array a x printf %s\\n ------- copy_array b y typeset -p a x b y } set -x m # vim: set ft=bash fenc=utf-8 ff=unix ts=4 noet : _EOF + m + typeset -gx BASH_COMPAT=51 + local - + set +m + x=(['0']='1' ['2']='3' ['4']='5') + typeset -A a x + y=(['0']='1' ['2']='3' ['4']='5') + typeset -a b y + copy_array a x + (( 1 + 2 % 2 )) + typeset k l q r s t + v=('src' 'ret') + typeset -a v + IFS= + read -d '' t + t='r[${|[ "${!r}" = "$1" ${| unset -n r; } ]; typeset -Gn r=${v[$((l=$?))]}; printf '\''%s[%q]=%q\n'\'' "${!r}" "$k" "${src[$k]}"; typeset -p "${!src}" "${!ret}" ;}${k}]' + s='r[${|[ "${!r}" = "$1" ${| unset -n r; } ]; typeset -Gn r=${v[$((l=$?))]}; printf '\''%s[%q]=%q\n'\'' "${!r}" "$k" "${src[$k]}"; typeset -p "${!src}" "${!ret}" ;}${k}]' + typeset -n s r=src + shopt -s localvar_unset + typeset -n r ret src + src=x + ret=a + for k in "${!src[@]}" +++ unset -n r ++ '[' x = a ']' ++ typeset -Gn r=ret ++ printf '%s[%q]=%q\n' a 4 5 a[4]=5 ++ typeset -p x a declare -A x=([4]="5" [2]="3" [0]="1" ) declare -A a + s=5 +++ unset -n r ++ '[' a = a ']' ++ typeset -Gn r=src ++ printf '%s[%q]=%q\n' x 4 5 x[4]=5 ++ typeset -p x a declare -A x=([4]="5" [2]="3" [0]="1" ) declare -A a + for k in "${!src[@]}" +++ unset -n r ++ '[' x = a ']' ++ typeset -Gn r=ret ++ printf '%s[%q]=%q\n' a 2 3 a[2]=3 ++ typeset -p x a declare -A x=([4]="5" [2]="3" [0]="1" ) declare -A a=([4]="5" ) + s=3 +++ unset -n r ++ '[' a = a ']' ++ typeset -Gn r=src ++ printf '%s[%q]=%q\n' x 2 3 x[2]=3 ++ typeset -p x a declare -A x=([4]="5" [2]="3" [0]="1" ) declare -A a=([4]="5" ) + for k in "${!src[@]}" +++ unset -n r ++ '[' x = a ']' ++ typeset -Gn r=ret ++ printf '%s[%q]=%q\n' a 0 1 a[0]=1 ++ typeset -p x a declare -A x=([4]="5" [2]="3" [0]="1" ) declare -A a=([4]="5" [2]="3" ) + s=1 +++ unset -n r ++ '[' a = a ']' ++ typeset -Gn r=src ++ printf '%s[%q]=%q\n' x 0 1 x[0]=1 ++ typeset -p x a declare -A x=([4]="5" [2]="3" [0]="1" ) declare -A a=([4]="5" [2]="3" ) + command shift 2 + false + shopt -u localvar_unset + printf '%s\n' ------- ------- + copy_array b y + (( 1 + 2 % 2 )) + typeset k l q r s t + v=('src' 'ret') + typeset -a v + IFS= + read -d '' t + t='r[${|[ "${!r}" = "$1" ${| unset -n r; } ]; typeset -Gn r=${v[$((l=$?))]}; printf '\''%s[%q]=%q\n'\'' "${!r}" "$k" "${src[$k]}"; typeset -p "${!src}" "${!ret}" ;}${k}]' + s='r[${|[ "${!r}" = "$1" ${| unset -n r; } ]; typeset -Gn r=${v[$((l=$?))]}; printf '\''%s[%q]=%q\n'\'' "${!r}" "$k" "${src[$k]}"; typeset -p "${!src}" "${!ret}" ;}${k}]' + typeset -n s r=src + shopt -s localvar_unset + typeset -n r ret src + src=y + ret=b + for k in "${!src[@]}" +++ unset -n r ++ '[' y = b ']' ++ typeset -Gn r=ret ++ printf '%s[%q]=%q\n' b 0 1 b[0]=1 ++ typeset -p y b declare -a y=([0]="1" [2]="3" [4]="5") declare -a b + s=1 +++ unset -n r ++ '[' b = b ']' ++ typeset -Gn r=src ++ printf '%s[%q]=%q\n' y 0 1 y[0]=1 ++ typeset -p y b declare -a y=([0]="1" [2]="3" [4]="5") declare -a b + for k in "${!src[@]}" +++ unset -n r ++ '[' y = b ']' ++ typeset -Gn r=ret ++ printf '%s[%q]=%q\n' b 2 3 b[2]=3 ++ typeset -p y b declare -a y=([0]="1" [2]="3" [4]="5") declare -a b + s=3 +++ unset -n r ++ '[' b = b ']' ++ typeset -Gn r=src ++ printf '%s[%q]=%q\n' y 2 3 y[2]=3 ++ typeset -p y b declare -a y=([0]="1" [2]="3" [4]="5") declare -a b + for k in "${!src[@]}" +++ unset -n r ++ '[' y = b ']' ++ typeset -Gn r=ret ++ printf '%s[%q]=%q\n' b 4 5 b[4]=5 ++ typeset -p y b declare -a y=([0]="1" [2]="3" [4]="5") declare -a b + s=5 +++ unset -n r ++ '[' b = b ']' ++ typeset -Gn r=src ++ printf '%s[%q]=%q\n' y 4 5 y[4]=5 ++ typeset -p y b declare -a y=([0]="1" [2]="3" [4]="5") declare -a b + command shift 2 + false + shopt -u localvar_unset + typeset -p a x b y declare -A a=([4]="5" [2]="3" [0]="1" ) declare -A x=([4]="5" [2]="3" [0]="1" ) declare -a b declare -a y=([0]="1" [2]="3" [4]="5")