Function: exch

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"
}