Как проверить наличие ключа в ассоциативном массиве bash?
Необходимо выполнить следующий алгоритм на BASH:
# Проверить, есть ли ключ
# Если нет, то
# добавить и присвоить значение 1
# Если есть, то
# добавить к значению 1
Я знаю как сделать это на java, должен получиться аналог этого кода:
import java.util.*;
public class Solution {
public static void main(String[] args) {
Map<String, Integer> states = new HashMap<>();
states.put("Germany" , 112);
states.put("Spain", 19);
states.put("France", 21);
states.put("Italy", 11);
if (!states.containsKey("Germany")) {
states.put("Germany", 1);
System.out.println("Added Germany to the map");
}
else {
int count = states.get("Germany");
states.put("Germany", count + 1);
System.out.println("Germany counter now is: " + states.get("Germany"));
}
}
}
Ответы (1 шт):
Автор решения: Ainar-G
→ Ссылка
Если вам не нужна эта печать в условии, то условие можно опустить, так как пустая строка в арифмитическом контексте равна нулю:
#!/usr/bin/env bash
declare -A states
states=(
[Germany]=112
[Spain]=19
[France]=21
[Italy]=11
)
states[Russia]=$((states[Russia] + 1))
for i in ${!states[*]}
do
echo "$i = ${states[$i]}"
done
Если вам нужно просто проверить, есть ли в массиве этот ключ, то
в новых версиях утилиты test есть ключ -v:
if [ -v states[Germany] ]
then
echo "Germany exists"
fi