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