logo

Масив Bash

У цій темі ми продемонструємо основи bash-масиву та їх використання в сценаріях оболонки bash.

Масив можна визначити як сукупність елементів подібного типу. На відміну від більшості мов програмування, масиви в сценаріях bash не обов’язково повинні бути набором подібних елементів. Оскільки Bash не відрізняє рядок від числа, масив може містити як рядки, так і числа.

Bash не підтримує багатовимірні масиви; ми не можемо мати елементи, які самі по собі є масивами. Bash підтримує одновимірні чисельно індексовані масиви, а також асоціативні масиви. Щоб отримати доступ до масиву з числовим індексом з останнього, ми можемо використовувати негативні індекси. Індекс «-1» вважатиметься посиланням на останній елемент. Ми можемо використовувати кілька елементів в масиві.

Оголошення масиву Bash

Масиви в Bash можна оголошувати такими способами:

Створення чисельно індексованих масивів

Ми можемо використовувати будь-яку змінну як індексований масив, не оголошуючи її.

Щоб явно оголосити змінну як масив Bash, використовуйте ключове слово 'declare', а синтаксис можна визначити так:

 declare -a ARRAY_NAME 

де,

ARRAY_NAME вказує ім’я, яке ми призначимо масиву.

Примітка:Правила іменування змінної в Bash такі ж, як і іменування масиву.

Загальний метод створення індексованого масиву можна визначити в такій формі:

 ARRAY_NAME[index_1]=value_1 ARRAY_NAME[index_2]=value_2 ARRAY_NAME[index_n]=value_n 

де ключове слово 'index' використовується для визначення додатних чисел.

Створення асоціативних масивів

На відміну від числових індексованих масивів, асоціативні масиви спочатку оголошуються. Ми можемо використовувати ключове слово 'declare' і опцію -A (верхній регістр) для оголошення асоціативних масивів. Синтаксис можна визначити так:

 declare -A ARRAY_NAME 

Загальний метод створення асоціативного масиву можна визначити у такій формі:

 declare -A ARRAY_NAME ARRAY_NAME[index_foo]=value_foo ARRAY_NAME[index_bar]=value_bar ARRAY_NAME[index_xyz]=value_xyz 

де index_ використовується для визначення будь-якого рядка.

Ми також можемо записати наведену вище форму таким чином:

створення сценарію оболонки для виконання
 declare -A ARRAY_NAME ARRAY_NAME=( [index_foo]=value_foo [index_bar]=value_bar [index_xyz]=value_xyz ) 

Ініціалізація масиву Bash

Щоб ініціалізувати масив Bash, ми можемо використати оператор присвоєння (=), вказавши список елементів у круглих дужках, розділених пробілами, як показано нижче:

 ARRAY_NAME=(element_1st element_2nd element_Nth) 

Примітка:Тут перший елемент матиме індекс 0. Також не повинно бути пробілу навколо оператора присвоєння (=).

Доступ до елементів масиву Bash

Щоб отримати доступ до елементів масиву Bash, ми можемо використовувати такий синтаксис:

 echo ${ARRAY_NAME[2]} 

Надрукувати масив Bash

Ми можемо використовувати ключове слово 'declare' з опцією '-p', щоб надрукувати всі елементи масиву Bash з усіма індексами та деталями. Синтаксис друку масиву Bash можна визначити так:

 declare -p ARRAY_NAME 

Операції з масивами

Після призначення масиву ми можемо виконувати над ним деякі корисні операції. Ми можемо відобразити його ключі та значення, а також змінити його, додаючи або видаляючи елементи:

Довідкові елементи

Щоб посилатися на один елемент, ми повинні знати номер індексу елемента. Ми можемо посилатися або друкувати будь-який елемент, використовуючи такий синтаксис:

 ${ARRAY_NAME[index]} 

Примітка:Фігурні дужки ${} потрібні, щоб уникнути операторів розширення імен файлів оболонки.

Наприклад, надрукуємо елемент масиву з індексом 2:

Скрипт Bash

 #!/bin/bash #Script to print an element of an array with an index of 2 #declaring the array declare -a example_array=( 'Welcome''To''Javatpoint' ) #printing the element with index of 2 echo ${example_array[2]} 

Вихід

 Javatpoint 

Якщо ми використовуємо @ або * замість зазначеного індексу, він розшириться до всіх членів масиву. Щоб надрукувати всі елементи, ми можемо використовувати наступну форму:

Скрипт Bash

 #!/bin/bash #Script to print all the elements of the array #declaring the array declare -a example_array=( 'Welcome''To''Javatpoint' ) #Printing all the elements echo '${example_array[@]}' 

Вихід

 Welcome to Javatpoint 

Єдина відмінність між використанням @ і * полягає в тому, що під час використання @ форму оточують подвійними лапками. У першому випадку (при використанні @) розширення забезпечує результат у слові для кожного елемента масиву. Це можна краще описати за допомогою циклу for. Припустімо, що у нас є масив із трьома елементами: «Ласкаво просимо», «Кому» та «Javatpoint»:

 $ example_array= (Welcome to Javatpoint) 

Застосування циклу з @:

 for i in '${example_array[@]}'; do echo '$i'; done 

Це дасть наступний результат:

відсортований кортеж python
 Welcome To Javatpoint 

Застосувавши цикл із *, буде отримано єдиний результат, що містить усі елементи масиву як одне слово:

 Welcome To Javatpoint 

Важливо розуміти використання @ і *, оскільки це корисно під час використання форми для повторення елементів масиву.

Друк ключів масиву

Ми також можемо отримати та надрукувати ключі, які використовуються в індексованих або асоціативних масивах, замість їхніх відповідних значень. Це можна виконати, додавши ! оператор перед назвою масиву, як показано нижче:

перетворення int на рядок
 ${!ARRAY_NAME[index]} 

приклад

 #!/bin/bash #Script to print the keys of the array #Declaring the Array declare -a example_array=( 'Welcome''To''Javatpoint' ) #Printing the Keys echo '${!example_array[@]}' 

Вихід

 0 1 2 

Знаходження довжини масиву

Ми можемо підрахувати кількість елементів, що містяться в масиві, використовуючи таку форму:

 ${#ARRAY_NAME[@]} 

приклад

 #!/bin/bash #Declaring the Array declare -a example_array=( 'Welcome''To''Javatpoint' ) #Printing Array Length echo 'The array contains ${#example_array[@]} elements' 

Вихід

 The array contains 3 elements 

Цикл по масиву

Загальний метод ітерації по кожному елементу в масиві — це використання циклу for.

приклад

 #!/bin/bash #Script to print all keys and values using loop through the array declare -a example_array=( 'Welcome''To''Javatpoint' ) #Array Loop for i in '${!example_array[@]}' do echo The key value of element '${example_array[$i]}' is '$i' done 

Вихід

Масив Bash

Ще один поширений метод циклічного проходження масиву — це отримання довжини масиву та використання циклу в стилі C:

Скрипт Bash

 #!/bin/bash #Script to loop through an array in C-style declare -a example_array=( &apos;Welcome&apos;&apos;To&apos;&apos;Javatpoint&apos; ) #Length of the Array length=${#example_array[@]} #Array Loop for (( i=0; i <${length}; i++ )) do echo $i ${example_array[$i]} done < pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/bash-tutorial/77/bash-array-2.webp" alt="Bash Array"> <h3>Adding Elements to an Array</h3> <p>We have an option to add elements to an indexed or associative array by specifying their index or associative key respectively. To add the new element to an array in bash, we can use the following form:</p> <pre> ARRAY_NAME[index_n]=&apos;New Element&apos; </pre> <p> <strong>Example</strong> </p> <pre> #!/bin/bash #Declaring an array declare -a example_array=( &apos;Java&apos;&apos;Python&apos;&apos;PHP&apos;&apos;HTML&apos; ) #Adding new element example_array[4]=&apos;JavaScript&apos; #Printing all the elements echo &apos;${example_array[@]}&apos; </pre> <p> <strong>Output</strong> </p> <pre> Java Python PHP HTML JavaScript </pre> <p>Another method for adding a new element to an array is by using the += operator. There is no need to specify the index in this method. We can add one or multiple elements in the array by using the following way:</p> <p> <strong>Example</strong> </p> <pre> #!/bin/bash #Declaring the Array declare -a example_array=( &apos;Java&apos;&apos;Python&apos;&apos;PHP&apos; ) #Adding new elements example_array+=( JavaScript CSS SQL ) #Printing all the elements echo &apos;${example_array[@]}&apos; </pre> <p> <strong>Output</strong> </p> <pre> Java Python PHP JavaScript CSS SQL </pre> <h3>Updating Array Element</h3> <p>We can update the array element by assigning a new value to the existing array by its index value. Let&apos;s change the array element at index 4 with an element &apos;Javatpoint&apos;.</p> <p> <strong>Example</strong> </p> <pre> #!/bin/bash #Script to update array element #Declaring the array declare -a example_array=( &apos;We&apos;&apos;welcome&apos;&apos;you&apos;&apos;on&apos;&apos;SSSIT&apos; ) #Updating the Array Element example_array[4]=Javatpoint #Printig all the elements of the Array echo ${example_array[@]} </pre> <p> <strong>Output</strong> </p> <pre> We welcome you on Javatpoint </pre> <h3>Deleting an Element from an Array</h3> <p>If we want to delete the element from the array, we have to know its index or key in case of an associative array. An element can be removed by using the &apos; <strong>unset</strong> &apos; command:</p> <pre> unset ARRAY_NAME[index] </pre> <p>An example is shown below to provide you a better understanding of this concept:</p> <p> <strong>Example</strong> </p> <pre> #!/bin/bash #Script to delete the element from the array #Declaring the array declare -a example_array=( &apos;Java&apos;&apos;Python&apos;&apos;HTML&apos;&apos;CSS&apos;&apos;JavaScript&apos; ) #Removing the element unset example_array[1] #Printing all the elements after deletion echo &apos;${example_array[@]}&apos; </pre> <p> <strong>Output</strong> </p> <pre> Java HTML CSS JavaScript </pre> <p>Here, we have created a simple array consisting of five elements, &apos;Java&apos;, &apos;Python&apos;, &apos;HTML&apos;, &apos;CSS&apos; and &apos;JavaScript&apos;. Then we removed the element &apos;Python&apos; from the array by using &apos;unset&apos; and referencing the index of it. The index of element &apos;Python&apos; was &apos;1&apos;, since bash arrays start from 0. If we check the indexes of the array after removing the element, we can see that the index for the removed element is missing. We can check the indexes by adding the following command into the script:</p> <pre> echo ${!example_array[@]} </pre> <p>The output will look like:</p> <pre> 0 2 3 4 </pre> <p>This concept also works for the associative arrays.</p> <h3>Deleting the Entire Array</h3> <p>Deleting an entire array is a very simple task. It can be performed by passing the array name as an argument to the &apos; <strong>unset</strong> &apos; command without specifying the index or key.</p> <p> <strong>Example</strong> </p> <pre> #!/bin/bash #Script to delete the entire Array #Declaring the Array declare -a example_array=( &apos;Java&apos;&apos;Python&apos;&apos;HTML&apos;&apos;CSS&apos;&apos;JavaScript&apos; ) #Deleting Entire Array unset example_array #Printing the Array Elements echo ${!example_array[@]} #Printing the keys echo ${!example_array[@]} </pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/bash-tutorial/77/bash-array-3.webp" alt="Bash Array"> <p>There will be no output if we try to print the content of the above script. An empty result is returned because the array doesn&apos;t exist anymore.</p> <h3>Slice Array Elements</h3> <p>Bash arrays can also be sliced from a given starting index to the ending index.</p> <p>To slice an array from starting index &apos;m&apos; to an ending index &apos;n&apos;, we can use the following syntax:</p> <pre> SLICED_ARRAY=(${ARRAY_NAME[@]:m:n}&apos;) </pre> <p> <strong>Example</strong> </p> <pre> #!/bin/bash #Script to slice Array Element from index 1 to index 3 #Declaring the Array example_array=( &apos;Java&apos;&apos;Python&apos;&apos;HTML&apos;&apos;CSS&apos;&apos;JavaScript&apos; ) #Slicing the Array sliced_array=(&apos;${example_array[@]:1:3}&apos;) #Applying for loop to iterate over each element in Array for i in &apos;${sliced_array[@]}&apos; do echo $i done </pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/bash-tutorial/77/bash-array-4.webp" alt="Bash Array"> <hr></${length};>

приклад

 #!/bin/bash #Declaring an array declare -a example_array=( &apos;Java&apos;&apos;Python&apos;&apos;PHP&apos;&apos;HTML&apos; ) #Adding new element example_array[4]=&apos;JavaScript&apos; #Printing all the elements echo &apos;${example_array[@]}&apos; 

Вихід

 Java Python PHP HTML JavaScript 

Інший спосіб додавання нового елемента до масиву — використання оператора +=. У цьому методі немає необхідності вказувати індекс. Ми можемо додати один або декілька елементів у масив, використовуючи наступний спосіб:

приклад

 #!/bin/bash #Declaring the Array declare -a example_array=( &apos;Java&apos;&apos;Python&apos;&apos;PHP&apos; ) #Adding new elements example_array+=( JavaScript CSS SQL ) #Printing all the elements echo &apos;${example_array[@]}&apos; 

Вихід

 Java Python PHP JavaScript CSS SQL 

Оновлення елемента масиву

Ми можемо оновити елемент масиву, присвоївши нове значення існуючому масиву за значенням його індексу. Давайте змінимо елемент масиву з індексом 4 на елемент «Javatpoint».

приклад

 #!/bin/bash #Script to update array element #Declaring the array declare -a example_array=( &apos;We&apos;&apos;welcome&apos;&apos;you&apos;&apos;on&apos;&apos;SSSIT&apos; ) #Updating the Array Element example_array[4]=Javatpoint #Printig all the elements of the Array echo ${example_array[@]} 

Вихід

 We welcome you on Javatpoint 

Видалення елемента з масиву

Якщо ми хочемо видалити елемент з масиву, ми повинні знати його індекс або ключ у випадку асоціативного масиву. Елемент можна видалити за допомогою ' не встановлено ' команда:

 unset ARRAY_NAME[index] 

Нижче наведено приклад, щоб краще зрозуміти цю концепцію:

приклад

 #!/bin/bash #Script to delete the element from the array #Declaring the array declare -a example_array=( &apos;Java&apos;&apos;Python&apos;&apos;HTML&apos;&apos;CSS&apos;&apos;JavaScript&apos; ) #Removing the element unset example_array[1] #Printing all the elements after deletion echo &apos;${example_array[@]}&apos; 

Вихід

 Java HTML CSS JavaScript 

Тут ми створили простий масив, що складається з п’яти елементів: «Java», «Python», «HTML», «CSS» і «JavaScript». Потім ми видалили елемент «Python» із масиву, використавши «unset» і посилаючись на його індекс. Індекс елемента «Python» був «1», оскільки масиви bash починаються з 0. Якщо ми перевіримо індекси масиву після видалення елемента, ми побачимо, що індекс для видаленого елемента відсутній. Ми можемо перевірити індекси, додавши таку команду в сценарій:

 echo ${!example_array[@]} 

Результат буде виглядати так:

 0 2 3 4 

Ця концепція також працює для асоціативних масивів.

Видалення всього масиву

Видалення цілого масиву є дуже простим завданням. Це можна виконати, передавши назву масиву як аргумент до ' не встановлено ' без вказівки індексу чи ключа.

приклад

статична функція в java
 #!/bin/bash #Script to delete the entire Array #Declaring the Array declare -a example_array=( &apos;Java&apos;&apos;Python&apos;&apos;HTML&apos;&apos;CSS&apos;&apos;JavaScript&apos; ) #Deleting Entire Array unset example_array #Printing the Array Elements echo ${!example_array[@]} #Printing the keys echo ${!example_array[@]} 

Вихід

Масив Bash

Не буде результату, якщо ми спробуємо надрукувати вміст вищезазначеного сценарію. Повертається порожній результат, оскільки масив більше не існує.

Елементи масиву фрагментів

Bash-масиви також можна нарізати від даного початкового індексу до кінцевого індексу.

Щоб розділити масив від початкового індексу 'm' до кінцевого індексу 'n', ми можемо використати такий синтаксис:

 SLICED_ARRAY=(${ARRAY_NAME[@]:m:n}&apos;) 

приклад

 #!/bin/bash #Script to slice Array Element from index 1 to index 3 #Declaring the Array example_array=( &apos;Java&apos;&apos;Python&apos;&apos;HTML&apos;&apos;CSS&apos;&apos;JavaScript&apos; ) #Slicing the Array sliced_array=(&apos;${example_array[@]:1:3}&apos;) #Applying for loop to iterate over each element in Array for i in &apos;${sliced_array[@]}&apos; do echo $i done 

Вихід

Масив Bash