Rotate top N elements; [N] moves to [0] with optional repeat
USAGE: roll arrayname num:3 repeat:1
roll() { # 1 2 3 => 3 1 2 #: default=3 # 1 2 3 4 => 4 1 2 3 #: 4 in $2 local arrayname=${1:?Array name required} num=${2:-${roldef:-3}} repeat=${3:-1} local 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[num-1]} unset array[num-1] array=( "$tmp" "${array[@]}" ) done
Copy array back to $arrayname
eval "$arrayname=( \"\${array[@]}\" )" }