1
0
Fork 0
digitalstudium.com/content/ru/bash-lifehacks/bash-arrays-and-hashmaps.md

69 lines
2.1 KiB
Markdown
Raw Normal View History

2023-05-08 15:46:26 +00:00
---
title: "BASH: массивы и ассоциативные массивы"
category: bash-lifehacks
filename: bash-arrays-and-hashmaps
date: 2023-05-07T13:35:26.956Z
---
Иногда возникает необходимость использовать в bash такие структуры данных, как списки (они же массивы) и ассоциативные массивы (он же хэш-таблицы). В данной статье приведены примеры того, как с ними работать.
<!--more-->
## 1. Массивы
создание массива в bash делается просто:
2023-07-23 12:55:12 +00:00
```bash
2023-05-08 15:46:26 +00:00
sample_array=(foo bar bazz)
```
Чтобы добавить один или несколько новых элементов в конец массива, нужно использовать такой синтаксис:
2023-07-23 12:55:12 +00:00
```bash
2023-05-08 15:46:26 +00:00
sample_array+=(six seven)
```
Чтобы пройти по массиву циклом, нужно использовать такой синтаксис:
2023-07-23 12:55:12 +00:00
```bash
2023-05-08 15:46:26 +00:00
for i in ${sample_array[@]}
do
echo $i
done
```
Чтобы получить элемент по индексу, используется такая конструкция:
2023-07-23 12:55:12 +00:00
```bash
2023-05-08 15:46:26 +00:00
echo ${sample_array[0]}
echo ${sample_array[3]}
# 0, 3 и т. п. - индексы элементов массива
```
Чтобы обрезать массив, используется такая конструкция:
2023-07-23 12:55:12 +00:00
```bash
2023-05-08 15:46:26 +00:00
sliced_array=${sample_array[@]:1} # выведет все элементы sample_array, начиная с 1-го
another_sliced_array=${sample_array[@]:1:5} # выведет элементы sample_array с 1-го по 5-й
```
## 2. Ассоциативные массивы
создание ассоциативного массива в bash делается так:
2023-07-23 12:55:12 +00:00
```bash
2023-05-08 15:46:26 +00:00
declare -A sample_hashmap=([one]=one [two]=two [three]=three [four]=four [five]=five)
```
Добавление новых элементов:
2023-07-23 12:55:12 +00:00
```bash
2023-05-08 15:46:26 +00:00
sample_hashmap[foo]=bar
```
Обход в цикле:
2023-07-23 12:55:12 +00:00
```bash
2023-05-08 15:46:26 +00:00
for key in ${sample_hashmap[@]}
do
echo ${sample_hashmap[$key]}
done
```