Введение в Bash-скриптинг
Alex Scriven
Data Scientist
Два типа массивов в Bash:
В Python: my_list = [1,3,2,4]
В R: my_vector <- c(1,3,2,4)
Массив с числовой индексацией в Bash можно создать двумя способами.
1. Объявить без добавления элементов
declare -a my_first_array
2. Создать и сразу добавить элементы
my_first_array=(1 2 3)
Помните: пробелы вокруг знака равенства недопустимы!
В Bash элементы массива не разделяются запятыми:
Это неверно:
my_first_array=(1, 2, 3)
Это верно:
my_first_array=(1 2 3)
array[@]. Обратите внимание: Bash требует фигурных скобок вокруг имени массива при обращении к его свойствам.my_array=(1 3 5 2)
echo ${my_array[@]}
1 3 5 2
#array[@]echo ${#my_array[@]}
4
Доступ к элементам массива осуществляется через квадратные скобки.
my_first_array=(15 20 300 42)
echo ${my_first_array[2]}
300
Задайте значение элемента массива через индексную нотацию.
my_first_array=(15 20 300 42 23 2 4 33 54 67 66)my_first_array[0]=999echo ${my_first_array[0]}
999
$, например $my_first_array[0]=999 — это не сработает.Используйте нотацию 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
Добавляйте элементы в массив с помощью 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
Что будет, если не добавить скобки вокруг добавляемого элемента? Посмотрим.
Например:
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 --version в терминалеВ Python:
my_dict = {'city_name': "New York", 'population': 14000000}
В R:
my_list = list(city_name = c('New York'), population = c(14000000))
Ассоциативный массив можно создать только с помощью синтаксиса declare (с флагом -A в верхнем регистре).
Можно сначала объявить массив, а затем добавить элементы, или сделать всё в одну строку.
Создадим ассоциативный массив:
declare -A city_details # Declare firstcity_details=([city_name]="New York" [population]=14000000) # Add elementsecho ${city_details[city_name]} # Index using key to return a value
New York
Можно также объявить ассоциативный массив и сразу присвоить значения в одну строку
declare -A city_details=([city_name]="New York" [population]=14000000)
Для доступа к ключам ассоциативного массива используйте !
echo ${!city_details[@]} # Return all the keys
city_name population
Введение в Bash-скриптинг