Exchange top two elements on stack
USAGE: exch arrayname
exch() { local arrayname=${1:?Array name required} val1 val2 varname=${2:-var} eval "[ ${#arrayname[@]} -ge 2 ] || return 1"
Store first two elements in variables val1 and val2
eval "val1=\${${arrayname}[0]}" eval "val2=\${${arrayname}[1]}"
rebuild array with variables switched
eval "$arrayname=( \"\$val2\" \"\$val1\" \"\${$arrayname[@]:2}\" )" printf -v "$varname" "%s" "$val" }