Запознайте се с Bash масивите – как да ги декларирате, манипулирате и изтривате.
Масивите са хранилища на данни, използвани за съхраняване на стойности, които имат някаква връзка една с друга. За разлика от повечето езици за програмиране, Bash масивите могат да съхраняват стойности от различни типове данни в един и същ масив.
Bash има два типа масиви: индексирани масиви и асоциативни масиви. За индексираните масиви индексите започват от 0 до (n-1), както е обичайно в повечето езици. Масивите в Bash обаче са редки. Това означава, че можете да присвоите (n-1)-ия елемент от масива, без да сте присвоили (n-2)-ия елемент.
В този урок ще научите как да работите с масиви в Bash. Да започваме.
Дефиниране на масиви
Има три начина, по които можете да дефинирате масиви в Bash. Подобно на Bash променливите, масивите трябва да бъдат инициализирани при създаване. Единственото изключение от това е, ако използвате декларирам ключова дума. Също така трябва да сте сигурни, че не е останало място от двете страни на оператора за присвояване, докато инициализирате масива.
Първият метод е съставно присвояване на стойности на името на масива. Има два начина да направите това:
arr1 = (3 5 6 7)
# or this
arr2 = ([3]=5 [1]=8 [0]=7)
При първото съставно присвояване стойностите в кръглите скоби се присвояват последователно от индекса [0] да се [3].
Във втория обаче стойностите се присвояват на индекс в какъвто и ред да е посочил програмистът.
Свързани: Какво представляват променливите на средата в Linux? Всичко, което трябва да знаете
Ако сте обърнали внимание на обр2, ще забележите този индекс [2] беше пропуснат. Масивът пак ще бъде създаден без грешки. Това присвояване всъщност е демонстрация на рядко съхранение в Bash масиви, както споменахме по-рано.
Забележете, че няма запетаи, разделящи стойностите на масива. Стойностите са просто разделени с интервали.
Вторият метод индиректно декларира масива. Можете просто да започнете да присвоявате стойности на нулеви елементи от масив:
arr3[0]=Toyota
arr3[1]=Honda
arr3[2]=Mercedes
Третият начин е изрично да декларирате масива с ключовата дума декларирам:
declare -a arrayName
Операции с масиви
За достъп до елементите на масива използвайте този синтаксис: ${масив[индекс]}
fruits=(mango banana apples)
echo${fruits[1]}# output is banana
Ако вместо това трябва да отпечатате целия масив, използвайте @ символ като
индекс на ${масив[индекс]}:
echo${fruits[@]}
За да разберете броя на елементите в масива, използвайте # символ, както е показано по-долу:
echo ${#fruits[1]}
Може също да се наложи да промените елементите на масива - вижте примера по-долу как да го направите. Подобно е на това как добавяте нов елемент. Единствената разлика е, че заменяте стойност с индекс, който вече има стойност.
fruits[1]=pears
Асоциативни масиви
Масив, който има произволни стойности като свои ключове, се нарича асоциативен масив. Тези масиви се използват за съхраняване на свързани двойки ключ-стойност.
Свързани: Как да превърнете Bash скриптовете в приложения с възможност за кликване с помощта на AppleScript
За да дефинирате асоциативен масив, трябва да го направите изрично, като използвате ключовата дума декларирам.
# associative array called animal
declare -A animal
animal[giraffe]=tall
animal[lion]=brave
animal[cheetah]=fast
Можете да получите достъп до елемент член по същия начин, по който правите индексирани масиви:
echo${animal[lion]}
Ако искате да отпечатате всички стойности, можете да използвате @ символ, както е показано по-долу:
echo${animal[@]}
Ако искате да отпечатате всички ключове на масива, можете да използвате @ и ! символи, както е показано по-долу:
echo${!animal[@]}
За да намерите броя на елементите, които има асоциативният масив, използвайте същия синтаксис, който бихте използвали с индексирани масиви (демонстрирано в последния раздел).
Ако искате да изтриете елемент от масив или целия масив, използвайте синтаксиса по-долу:
unset arrayName[Key] # delete array item
unset arrayName # delete entire array
Използване на командата printf
Може би сте забелязали, че цялата тази статия използва ехо команда за извеждане на данни в обвивката. The ехо работи за този урок, но има малко функции и гъвкавост, когато става въпрос за форматиране на низове.
както и да е printf предлага по-специфични опции за форматиране, които правят Bash скриптовете лесни. Изучаване на printf със сигурност ще подобри вашето изживяване при форматиране на низове и ефективност в Bash.