Как проверить наличие ключа в ассоциативном массиве 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
→ Ссылка