Как да използвате индексни масиви в Bash

Kak Da Izpolzvate Indeksni Masivi V Bash



Bash осигурява поддръжка за индексирани масиви, които по същество са списъци с елементи, които могат да бъдат достъпни чрез техния индексен номер. Индексираните масиви са особено полезни, когато искате да съхранявате и манипулирате много свързани стойности, прочетете допълнително тази статия, за да научите как да използвате индексни масиви.

Какво представляват индексните масиви

Индексираните масиви са колекция от елементи в bash, които могат да бъдат достъпни с помощта на индекс или ключ. Тези масиви могат да се използват за съхраняване и извличане на данни в определен ред, което улеснява управлението на големи количества данни. Синтаксисът за деклариране на индексиран масив в bash е както следва:

< име_на_масив > = ( елемент1 елемент2 елемент3 ... )

Тук array_name е името на масива, а element1, element2, element3 и т.н. са стойностите, които трябва да се съхраняват в масива. Стойностите са разделени с интервал и имайте предвид, че можете също да използвате командата declare, за да създадете масив.







Как да използвате индексирани масиви в Bash

За да създадете индексен масив в bash, просто трябва да декларирате променлива и да й присвоите стойности, оградени в скоби и разделени с интервали. Ето няколко примера, които демонстрират как да използвате индексирани масиви в bash:



Пренареждане на списък в Bash

Ако имате списък с елементи в определен ред и искате да ги пренаредите по различен начин. Можете да използвате индексен масив, за да създадете нова поръчка за елементите, както следва:



#!/bin/bash
елементи = ( 'манго' 'Ананас' 'ягода' 'Череша' 'Грозде' )
поръчка = ( 4 2 0 3 1 )
за аз в ' ${order[@]} '
направи
ехо ${items[$i]}
Свършен

В този пример създаваме масив, наречен items с пет елемента. Ние също така създаваме индексен масив, наречен order, който определя нов ред за елементите. След това преминаваме през масива за поръчки и използваме всяка стойност като индекс, за да извлечем съответния елемент от масива с елементи и да го отпечатаме.





Филтриране на списък в Bash

Ако имате списък с елементи и искате да филтрирате определени елементи въз основа на условие. Можете да използвате индексен масив, за да следите индексите на елементите, които отговарят на условието, както следва:



#!/bin/bash
елементи = ( 'манго' 'Ананас' 'ягода' 'Череша' 'Грозде' )
индекси = ( )

за аз в ' ${!items[@]} '
направи
ако [ [ ${items[$i]} == * 'р' * ] ]
тогава
индекси+= ( $i )
бъда
Свършен

за аз в ' ${indexes[@]} '
направи
ехо ${items[$i]}
Свършен

В този пример създаваме масив, наречен items с пет елемента. Също така създаваме празен индексен масив, наречен индекси. След това преминаваме през масива с елементи и проверяваме дали всеки елемент съдържа буквата „r“. Ако е така, добавяме неговия индекс към масива с индекси. Накрая преминаваме през масива с индекси и използваме всяка стойност като индекс, за да извлечем съответния елемент от масива с елементи и да го отпечатаме.

Преброяване на срещания в Bash

Ако имате списък с елементи и искате да преброите броя на срещанията на всеки елемент, можете да използвате индексен масив, за да следите броя и ето пример за демонстрация:

#!/bin/bash
елементи = ( 'манго' 'Ананас' 'ягода' 'Череша' 'Грозде' )
брои = ( )

за аз в ' ${!items[@]} '
направи
ако [ [ ! ' ${counts[@]} ' =~ ' ${items[$i]} ' ] ]
тогава
брои+= ( ' ${items[$i]} 1' )
друго
индекс =$ ( ехо ' ${counts[@]} ' | тр ' ' '\н' | хватка '^ ${items[$i]} ' | с )
броя =$ ( ехо ' ${counts[$index-1]} ' | разрез ' ' -f2 )
брои [ $индекс - 1 ] = ' ${items[$i]} $((броене+1) )'
бъда
Свършен

за броя в ' ${counts[@]} '
направи
ехо $брой
Свършен

Първо инициализира масив, наречен „items“ със списък от низове. След това декларира празен масив, наречен „counts“. Създава се цикъл for за итерация за всеки елемент в масива „items“ и за всеки елемент той проверява дали вече съществува в масива „counts“.

Ако не съществува, той добавя елемента и броя на 1 към масива „counts“. Ако съществува, той увеличава броя на този елемент в масива „counts“. И накрая, за отпечатване на всеки елемент и съответния му брой се използва друг for цикъл. Резултатът от този код ще отпечата броя на всеки елемент в масива „items“, като дубликатите се броят отделно.

Актуализиране на списък в Bash

Ако имате списък с елементи и искате да добавите или изтриете елементи от него, можете да използвате индексен масив за него и ето пример за демонстрация:

#!/bin/bash
елементи = ( 'манго' 'Ананас' 'ягода' 'Череша' 'Грозде' )

# Добавяне на нов елемент към индексирания масив при индекс 2
елементи [ 6 ] = 'портокал'
# Изтриване на елемент с индекс 2 от индексирания масив
ненастроен елементи [ 2 ]

# Отпечатване на актуализирания масив
ехо ' ${items[@]} '

В скрипта се дефинира индексиран масив “items” с пет начални елемента. За да добавите нов елемент, стойността просто се присвоява на желания индекс с помощта на синтаксиса array[index]=value. В този скрипт „оранжево“ се добавя към индекс 6 на масива. За да изтрием елемент, използваме командата unset, последвана от индекса на елемента, който искаме да премахнем. В този случай елементът с индекс 2 („Ягода“) се изтрива. След това актуализираният масив се отпечатва с помощта на синтаксиса „${array[@]}“, който разширява целия масив.

Заключение

Индексираните масиви са удобна структура на bash, която ви позволява да съхранявате и манипулирате множество стойности, като използвате една променлива. Като разберете синтаксиса и използването на индексираните масиви, можете да пишете по-ефективни и ефективни bash скриптове.