Function: rolr

Rotate top N elements; [0] moves to [N] with optional repeat

USAGE: rolr arrayname num:3 repeat:1

rolr()
{     
  # 1 2 3 =>  2 3 1     #: default=3
  # 1 2 3 4 => 2 3 4 1  #: 4 in $2
  local arrayname=${1:?Array name required} num=${2:-${roldef:-3}}
  local repeat=${3:-1} array tmp
  

Check that there are at least $num elements in the array

  eval "[ ${#arrayname[@]} -ge $num ] || return 1"
  

Copy the array, $arrayname, to local array

  eval "array=( \"\${$arrayname[@]}\" )"
  while [ $(( repeat -= 1 )) -ge 0 ]
  do
    tmp=${array[0]}
    unset array[0]
    array=( "${array[@]:0:num-1}" "$tmp" "${array[@]:num-1}" )
  done
  

Copy array back to $arrayname

  eval "$arrayname=( \"\${array[@]}\" )"
}