Водич за Басх низове

У овом водичу о Басх низовима, научићете како да декларирате и радите са индексираним и асоцијативним низовима у Басх-у.

У Басх-у можете креирати низове за чување колекције елемената. Басх низови су једнодимензионалне колекције. У програмским језицима као што су Ц и Ц++, низови су колекције елемената истог типа података. Међутим, у Басху, у зависности од случаја употребе, можете да складиштите целе бројеве и низове у истом низу.

У овом водичу ћете научити како да декларишете Басх низ и приступите његовим елементима. Затим ћете научити како да прођете кроз елементе низа и да додате елементе низу. Коначно, научићете о асоцијативним низовима у Басху.

Почнимо!

⚙ Заинтересовани сте за кодирање заједно? Ево предуслова:

Како декларисати Басх низ

У овом одељку ћете научити синтаксу за декларисање Басх низа и примере кода.

Синтакса декларације Басх низа

Можете декларисати низ у Басх користећи следећу синтаксу:

$ arrayName=(elt1 elt2 ... eltN)

# arrayName is the name of the array
# elt1 through eltN are the N elements in the array

У горњој синтакси, арраиНаме означава име низа који садржи Н елемената елт1…елтН.

Елементи низа су затворени између отварања и затварања заграда (). Такође, приметите да су елементи низа одвојени размаком. Као и код било које Басх променљиве, не би требало да постоји размак пре или после оператора доделе =.

📑 У већини других програмских језика, елементе низа или сличних колекција одвајате зарезима. Али у Басху, размак је сепаратор.

У Басху, такви низови у којима су елементи идентификовани њиховим индексом се називају индексирани низ.

Декларисање индексираних низова у Басху

Хајде да креирамо цене, низ бројева.

$ prices=(24 27 18 30 15)

Као што је поменуто у синтакси, бројеви у низу цена су одвојени размаком, затвореним у заградама, без размака пре и после = оператора доделе.

  Како да направите низ бројева са једнаком размаком

У Басх-у можете користити команду ецхо да одштампате вредност променљиве. Коришћењем $вариаблеНаме се штампа вредност променљивеНаме. Међутим, можете видети да коришћење имена низа исписује само први елемент.

$ echo $prices
24

Басх низови прате нулто индексирање. Дакле, први елемент је на индексу 0, други елемент је на индексу 1, и тако даље. Такође можете користити негативно индексирање; индекс последњег елемента низа је -1.

Шта се дешава ако покушате да приступите елементу на одређеном индексу и одштампате га? Покушајмо да одштампамо елемент са индексом 1.

$ echo $prices[1]
24[1]

Зашто је излаз 24[1]? 🤔 То је зато што Басх замењује $прицес са 24, првим елементом у низу и [1] је штампан као такав.

Да бисте одштампали елемент на одређеном индексу, можете користити проширење параметара обрасца ${прицес[index]}.

$ echo ${prices[1]}
# 27
$ echo ${prices[2]}
# 18

Да бисте одштампали све елементе у низу, можете навести @ уместо одређеног индекса.

$ echo ${prices[@]}
24 27 18 30 15

Затим, направимо низ стрингова. Покретање следеће команде креира индексирани низ:

$ declare -a fruits

Опција -а креира индексирани низ. Сада можете да попуњавате низ, један по елемент, тако што ћете елемент прогласити одређеним индексом, као што је приказано у наставку:

$ fruits[0]="cherry"
$ fruits[1]="berry"
$ fruits[2]="apple"
$ fruits[3]="pear"
$ fruits[4]="melon"
$ fruits[5]="orange"

Сада, да бисте одштампали све елементе низа, можете користити ${фруитс[@]}.

$ echo ${fruits[@]}
cherry berry apple pear melon orange

Приступите елементима Басх низа

Елементима низа можете приступити на следеће начине:

  • Прођите кроз низ и директно приступите елементу
  • Прођите кроз скуп индекса и приступних елемената на одређеном индексу

Прођите кроз низ и приступите елементима

Ако сте кодирали у Питхон-у, користићете фор петљу користећи следећу синтаксу:

for elt in some_list:
    print(elt)

Хајде сада да напишемо Басх еквивалент горњој фор петљи.

Знамо да {прицес[@]} се проширује на све елементе у низу цена. И ${прицес[@]} нам даје вредности свих елемената.

  Како дискретно бирати број за хитне случајеве са вашег иПхоне-а

Басх фор петља је слична Питхоновој синтакси фор петље, али изјаве у телу петље треба да буду затворене унутар до и доне, као што је приказано:

$ for price in ${prices[@]}
> do
> echo $price
> done

Пошто користимо команду ецхо и исписујемо вредност променљиве цене, добијамо следећи излаз:

# output
24
27
18
30
15

Приступите елементима користећи индекс низа

Други начин за петљу кроз низове је коришћење индекса елемената. Ово је слично конструкцији фор петље у Питхон-у која користи функцију ранге():

for i in range(len(some_list)):
    print(i)

Да бисте добили листу индекса за петљу, можете поставити знак узвика (!) испред имена низа у проширењу параметра. Ово ће вам дати листу свих важећих индекса за низ, као што је приказано:

$ echo ${!prices[@]}
0 1 2 3 4

Низ цена садржи 5 елемената, тако да индекс почиње од 0 и иде до 4.

Затим можемо проћи кроз листу индекса и приступити елементу на сваком индексу. За индекс и, ${прицес[i]} је елемент на индексу и.

$ for i in ${!prices[@]}
> do
> echo ${prices[i]}
> done

Горња петља исписује све елементе у низу.

# output
24
27
18
30
15

💬 Овде, након приступа сваком елементу, вршимо једноставну операцију штампања његове вредности. Генерално, можемо имати било коју ваљану обраду елемената.

Додајте елементе Басх низу

У низу цена имамо пет елемената (на индексима 0,1,2,3 и 4). Ако желите да додате елемент на крај низа на индексу 5, то можете учинити на следећи начин:

$ prices[5]=21

Видимо да је 21 додато на крај низа цена.

$ echo ${prices[@]}
24 27 18 30 15 21

Међутим, згодније је додати на крај низа — без памћења — индекс последњег доданог елемента или број елемената који се тренутно налазе у низу.

Можете га користити арраиНаме+=(елементс(с)) да додате један или више елемената низу, као што је приказано:

$ prices+=(10)

Сада, ако одштампамо низ цена, видимо да је 10 додато на крај низа.

$ echo ${prices[@]}
24 27 18 30 15 21 10

Затим, хајде да научимо како да декларишемо асоцијативне низове у Басху.

  Како користити поплочавање прозора у Гноме Схелл-у

Асоцијативни низови у Басху

Ако желите да дефинишете однос у смислу парова кључ/вредност, можете користити асоцијативни низ. Можете декларисати асоцијативни низ користећи следећу општу синтаксу. Приметите да користимо опцију -А уместо -а.

$ declare -A fruits_prices

Можете додати елементе асоцијативном низу тако што ћете навести кључ и одговарајућу вредност. Овде смо додали називе воћа као кључеве и бројеве из низа цена као вредности.

$ fruits_prices[cherry]=24
$ fruits_prices[berry]=27
$ fruits_prices[apple]=18
$ fruits_prices[pear]=30
$ fruits_prices[melon]=15
$ fruits_prices[orange]=21

Дакле, како да приступимо елементима у асоцијативном низу?

Баш онако како бисте потражили вредност користећи одговарајући кључ у Питхон речнику, можете приступити вредностима у асоцијативном низу помоћу кључева.

$ echo ${fruits_prices[berry]}
# 27

Видимо да је ${фруитс_прицес[@]} се проширује на вредности и ${!фруитс_прицес[@]} се проширује на тастере.

$ echo ${fruits_prices[@]}
# Output: 18 27 21 24 30 15
$ echo ${!fruits_prices[@]}
# Output: apple berry orange cherry pear melon

Напомена: Редослед елемената није исти као редослед којим смо их додали. То је зато што, за разлику од индексираних низова, асоцијативни низови нису уређене колекције. Уместо тога, они раде на повезаности између кључева и вредности. Дакле, кључеви су за асоцијативне низове исто што су индекси за индексне низове.

Такође можете проћи кроз асоцијативни низ и приступити кључевима, као што је приказано:

$ for key in ${!fruits_prices[@]}
> do
> echo $key
> done
# Output
apple
berry
orange
cherry
pear
melon

Следећа петља показује како можете да приступите вредностима.

$ for value in ${fruits_prices[@]}
> do
> echo $value
> done
# Output
18
27
21
24
30
15

Иако се препоручује коришћење арраиНаме[key]=валуе, можете га декларисати и као низ овако:

declare -A arrayName
arrayName=(key1 value1 key2 value2 ... keyN valueN)

На овај начин, Басх закључује први елемент као први кључ, други елемент као прву вредност и тако даље.

Сумирајући

Надам се да сада разумете како да креирате и радите са Басх низовима. Ево кратког прегледа онога што сте научили.

  • Можете декларисати индексирани низ у Басху користећи синтаксу арраиНаме=(елт1 елт2 елт3 … елтН) или покренути децларе -а арраиНаме и додати елементе низу.
  • Да бисте приступили елементима, можете проћи кроз петљу користећи ${арраиНаме[@]}. Алтернативно, можете добити листу свих важећих индекса користећи проширење параметара ${!арраиНаме[@]}.
  • Коначно, научили сте и како да декларишете асоцијативни низ за чување парова кључ-вредност у Басху.

Затим погледајте водич за петље у Басху.