У цій темі ми продемонструємо основи 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
Вихід
Ще один поширений метод циклічного проходження масиву — це отримання довжини масиву та використання циклу в стилі C:
Скрипт Bash
#!/bin/bash #Script to loop through an array in C-style declare -a example_array=( 'Welcome''To''Javatpoint' ) #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]='New Element' </pre> <p> <strong>Example</strong> </p> <pre> #!/bin/bash #Declaring an array declare -a example_array=( 'Java''Python''PHP''HTML' ) #Adding new element example_array[4]='JavaScript' #Printing all the elements echo '${example_array[@]}' </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=( 'Java''Python''PHP' ) #Adding new elements example_array+=( JavaScript CSS SQL ) #Printing all the elements echo '${example_array[@]}' </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's change the array element at index 4 with an element 'Javatpoint'.</p> <p> <strong>Example</strong> </p> <pre> #!/bin/bash #Script to update array element #Declaring the array declare -a example_array=( 'We''welcome''you''on''SSSIT' ) #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 ' <strong>unset</strong> ' 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=( 'Java''Python''HTML''CSS''JavaScript' ) #Removing the element unset example_array[1] #Printing all the elements after deletion echo '${example_array[@]}' </pre> <p> <strong>Output</strong> </p> <pre> Java HTML CSS JavaScript </pre> <p>Here, we have created a simple array consisting of five elements, 'Java', 'Python', 'HTML', 'CSS' and 'JavaScript'. Then we removed the element 'Python' from the array by using 'unset' and referencing the index of it. The index of element 'Python' was '1', 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 ' <strong>unset</strong> ' 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=( 'Java''Python''HTML''CSS''JavaScript' ) #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'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 'm' to an ending index 'n', we can use the following syntax:</p> <pre> SLICED_ARRAY=(${ARRAY_NAME[@]:m:n}') </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=( 'Java''Python''HTML''CSS''JavaScript' ) #Slicing the Array sliced_array=('${example_array[@]:1:3}') #Applying for loop to iterate over each element in Array for i in '${sliced_array[@]}' 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=( 'Java''Python''PHP''HTML' ) #Adding new element example_array[4]='JavaScript' #Printing all the elements echo '${example_array[@]}'
Вихід
Java Python PHP HTML JavaScript
Інший спосіб додавання нового елемента до масиву — використання оператора +=. У цьому методі немає необхідності вказувати індекс. Ми можемо додати один або декілька елементів у масив, використовуючи наступний спосіб:
приклад
#!/bin/bash #Declaring the Array declare -a example_array=( 'Java''Python''PHP' ) #Adding new elements example_array+=( JavaScript CSS SQL ) #Printing all the elements echo '${example_array[@]}'
Вихід
Java Python PHP JavaScript CSS SQL
Оновлення елемента масиву
Ми можемо оновити елемент масиву, присвоївши нове значення існуючому масиву за значенням його індексу. Давайте змінимо елемент масиву з індексом 4 на елемент «Javatpoint».
приклад
#!/bin/bash #Script to update array element #Declaring the array declare -a example_array=( 'We''welcome''you''on''SSSIT' ) #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=( 'Java''Python''HTML''CSS''JavaScript' ) #Removing the element unset example_array[1] #Printing all the elements after deletion echo '${example_array[@]}'
Вихід
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=( 'Java''Python''HTML''CSS''JavaScript' ) #Deleting Entire Array unset example_array #Printing the Array Elements echo ${!example_array[@]} #Printing the keys echo ${!example_array[@]}
Вихід
Не буде результату, якщо ми спробуємо надрукувати вміст вищезазначеного сценарію. Повертається порожній результат, оскільки масив більше не існує.
Елементи масиву фрагментів
Bash-масиви також можна нарізати від даного початкового індексу до кінцевого індексу.
Щоб розділити масив від початкового індексу 'm' до кінцевого індексу 'n', ми можемо використати такий синтаксис:
SLICED_ARRAY=(${ARRAY_NAME[@]:m:n}')
приклад
#!/bin/bash #Script to slice Array Element from index 1 to index 3 #Declaring the Array example_array=( 'Java''Python''HTML''CSS''JavaScript' ) #Slicing the Array sliced_array=('${example_array[@]:1:3}') #Applying for loop to iterate over each element in Array for i in '${sliced_array[@]}' do echo $i done
Вихід
${length};>