[英]Values rotation in array with bash
我創建了一個小腳本,可以旋轉數組中的值。 目的是將值向右移動,並使數組的最后一個值成為第一個值,以便創建旋轉。
該練習的目的是在不使用臨時數組的情況下執行此操作,而是創建一個臨時變量,在該變量中,我可以將數組的值之一放入其中,然后將所有值右移,然后將臨時變量放入數組中。
所以,我的腳本:
#!/bin/bash
declare -a array
empty=0
size()
{
read -p " How many box in you array ? : " size
}
array_creation()
{
counter=1
while [ $counter -le $size ]
do
array[$counter]=$counter
let "counter = counter + 1"
done
}
loop()
{
while [ $empty -eq 0 ]
do
clear
echo "${array[*]}"
tmp=$(echo "${array[$size]}")
counter=$size
while [ $counter -ge 2 ]
do
let " move = counter - 1"
array[$counter]=$(echo "${array[$move]}")
let "counter = counter - 1"
done
array[1]=$tmp
echo ""
loop_works
done
}
loop_works()
{
read -p " Press N to shift boxes to the right : " add
counter=$(($size + 1))
}
size
array_creation
loop
當我按下“ n”時,我的腳本運行良好,但是我不滿意……我相信我的腳本“過於復雜”,對於這種簡單的練習,我自己感到非常困難……
你能告訴我如何簡化我的劇本嗎?
謝謝 !
您可以通過參數擴展來更輕松地執行此操作,它允許您使用${array[@]:start:length}
進行切片:
#!/bin/bash
read -rp "Number of elements: " length
read -rp "Places to shift: " n
n=$((length-n))
array=( $(seq 1 "$length") )
echo "Original: ${array[*]}"
array=( "${array[@]:n}" "${array[@]:0:n}" )
echo "Shifted: ${array[*]}"
例:
$ ./myscript
Number of elements: 7
Places to shift: 2
Original: 1 2 3 4 5 6 7
Shifted: 6 7 1 2 3 4 5
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.