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[@]}\" )" }