Вращение значений в массиве с помощью bash - PullRequest
0 голосов
/ 19 мая 2019

Я создал небольшой скрипт, который позволяет вращать значения в массиве.Цель состояла в том, чтобы сместить значения вправо и чтобы последнее значение массива стало первым значением для создания поворота.

Цель упражнения состояла в том, чтобы сделать это без использования временного массива, ночтобы создать временную переменную, в которую я могу поместить одно из значений массива, затем сдвинуть все значения вправо и затем поместить временную переменную в массив.

Итак, мой сценарий:

#!/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", мой сценарий работает отлично, но я не удовлетворен ... Я считаю, что мой сценарий "слишком сложен", ясделал это очень трудно для себя из-за этого простого упражнения ...

Можете ли вы показать, как я могу упростить свой сценарий?

Спасибо!

1 Ответ

1 голос
/ 19 мая 2019

Это проще сделать с помощью расширения параметров, которое позволяет нарезать с помощью ${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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...