Function: rotate

Move element from one end of the array to the other with optional repeat

USAGE: rotate arrayname [-]n

rotate()
{        
  local arrayname=${1:?Array name required} num=${2:-1} tmp n
  

Copy the array, $arrayname, to local array

  eval "array=( \"\${$arrayname[@]}\" )"
  if [ $num -gt 0 ]
  then
    

N > 0: move first element to end of array; repeat as necessary

    while [ $(( num -= 1 )) -ge 0 ]
    do
      tmp=${array[0]}
      unset array[0]
      array=( "${array[@]}" "$tmp" )
    done
  else
    

n < 0: move last element to beginning of array; repeat as necessary

    n=$(( ${#array[@]} - 1 ))
    while [ $(( num += 1 )) -le 0 ]
    do
      tmp=${array[n]}
      unset array[n]
      array=( "$tmp" "${array[@]}" )
    done
  fi
  eval "$arrayname=( \"\${array[@]}\" )"
}