Масиви в Bash

Вступ до Bash Scripting

Alex Scriven

Data Scientist

Що таке масив?

Два типи масивів у Bash:

  • Масив
    • «Звичайна» структура з числовими індексами.
    • У Python зветься «list», в R — «vector».

In Python: my_list = [1,3,2,4]

In R: my_vector <- c(1,3,2,4)

Вступ до Bash Scripting

Створення масиву в Bash

Створити масив із числовими індексами в Bash можна двома способами.

  1. Оголосіть без додавання елементів
declare -a my_first_array
  1. Створіть і додайте елементи одночасно
my_first_array=(1 2 3)

Пам'ятайте: жодних пробілів навколо знака дорівнює!

Вступ до Bash Scripting

Обережно з комами!

У Bash коми не використовують для відокремлення елементів масиву:

Так робити не можна:

my_first_array=(1, 2, 3)

Так — правильно:

my_first_array=(1 2 3)
Вступ до Bash Scripting

Важливі властивості масивів

  • Усі елементи масиву повертаються через array[@]. Зверніть увагу: у Bash потрібні фігурні дужки навколо назви масиву під час доступу до цих властивостей.
my_array=(1 3 5 2)
echo ${my_array[@]}
1 3 5 2
  • Довжину масиву отримують через #array[@]
echo ${#my_array[@]}
4
Вступ до Bash Scripting

Робота з елементами масиву

Доступ до елементів масиву через квадратні дужки.

my_first_array=(15 20 300 42)
echo ${my_first_array[2]}
300
  • Пам'ятайте: у Bash масиви мають нульову індексацію, як у Python (але не як в R!)
Вступ до Bash Scripting

Робота з елементами масиву

Задавайте елементи масиву за індексом.

my_first_array=(15 20 300 42 23 2 4 33 54 67 66)

my_first_array[0]=999
echo ${my_first_array[0]}
999
  • Пам'ятайте: не використовуйте $ під час перезапису індексу, наприклад $my_first_array[0]=999 — це не спрацює.
Вступ до Bash Scripting

Робота з елементами масиву

Використовуйте array[@]:N:M, щоб «вирізати» підмножину масиву.

  • Тут N — початковий індекс, а M — скільки елементів повернути.
my_first_array=(15 20 300 42 23 2 4 33 54 67 66)
echo ${my_first_array[@]:3:2}
42 23
Вступ до Bash Scripting

Додавання до масивів

Додавайте в кінець масиву за допомогою array+=(elements).

Наприклад:

my_array=(300 42 23 2 4 33 54 67 66)

my_array+=(10) echo ${my_array[@]}
300 42 23 2 4 33 54 67 66 10
Вступ до Bash Scripting

Як не додавати до масивів

Що буде, якщо не поставити дужки навколо того, що додаєте? Перевірмо.

Наприклад:

my_array=(300 42 23 2 4 33 54 67 66)
my_array+=10
echo ${my_array[@]}
30010 42 23 2 4 33 54 67 66

Рядок 10 буде просто дописано до першого елемента. Це не те, що нам потрібно!

Вступ до Bash Scripting

Асоціативні масиви

  • Асоціативний масив
    • Подібний до звичайного, але з ключами та значеннями, а не з числовими індексами
    • Подібний до словника в Python або списку в R
    • Примітка: доступний лише з Bash 4 і новіших. Деякі сучасні Mac мають старий Bash! Перевірте в терміналі bash --version

In Python:

my_dict = {'city_name': "New York", 'population': 14000000}

In R:

my_list = list(city_name = c('New York'), population = c(14000000))
Вступ до Bash Scripting

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

Асоціативний масив можна створити лише через оголошення declare (з великою літерою -A).

Можна спершу оголосити, а потім додавати елементи, або зробити все в одному рядку.

  • Беріть «ключі» в квадратні дужки, значення задавайте після знака дорівнює.
    • Можна додавати кілька елементів одночасно.
Вступ до Bash Scripting

Приклад асоціативного масиву

Створімо асоціативний масив:

declare -A city_details # Спочатку оголошуємо

city_details=([city_name]="New York" [population]=14000000) # Додаємо елементи
echo ${city_details[city_name]} # Індекс за ключем, щоб отримати значення
New York
Вступ до Bash Scripting

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

Або створіть асоціативний масив і призначте значення в одному рядку

  • Усе інше — так само
declare -A city_details=([city_name]="New York" [population]=14000000)

Отримуйте «ключі» асоціативного масиву через !

echo ${!city_details[@]} # Повернути всі ключі
city_name population
Вступ до Bash Scripting

Давайте потренуємось!

Вступ до Bash Scripting

Preparing Video For Download...