Move element to right or left
USAGE: move arrayname enum num
move() { local arrayname=${1:?Arrayname required} enum=${2:?Element required} num=${3:-1} local array val left right newsub
Copy the array, $arrayname, to local array
eval "array=( \"\${$arrayname[@]}\" )" val=${array[enum]} newsub=$(( enum + num +1 )) [ $newsub -lt 0 ] && newsub=0 if [ $num -gt 0 ] then left=( "${array[@]:0:newsub}" ) right=( "${array[@]:newsub}" ) array=( "${left[@]}" "$val" "${right[@]}" ) unset array[enum] elif [ $num -lt 0 ] then unset array[enum] [ $newsub -le 0 ] && newsub=1 left=( "${array[@]:0:newsub-1}" ) right=( "${array[@]:newsub-1}" ) array=( "${left[@]}" "$val" "${right[@]}" ) fi
Copy array back to $arrayname
eval "$arrayname=( \"\${array[@]}\" )" } remove() #@ Remove element from array { #@ USAGE: remove arrayname position local arrayname=${1:?Arrayname required} num=${2:-1} local array [ $num -lt 0 ] && num=0 #? Or should this return an error??? unset $arrayname[num]
Copy array back to $arrayname
eval "$arrayname=( \"\${$arrayname[@]}\" )" }