簡體   English   中英

用bash值旋轉數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM