2014-10-15 3 views
1

У меня есть этот ассоциативный массив:Как прирастить ассоциативный массив в Bash

lettres['A']=0 
…(from 'A' to 'Z')… 
lettres['Z']=0 

Мой вопрос прост: Как получить значение одного элемента и увеличить его? Я пробовал следующее:

lettres[$char]=${lettres[$char]}++ 

Но это терпит неудачу, в результате получается «0 ++++++++». Как я могу легко увеличить значение?

EDIT: Подробнее Код:

while ((i++ < ${#word})); do 
    #$char current char 
    char=$(expr substr "$word" $i 1) 
    if [[ "${mot[@]}" =~ "${char} " || "${mot[${#mot[@]}-1]}" == "${char}" ]]; then 
     #char is currently in array $mot -> skipping 
     echo 'SKIPPING' 
    else 
     #Char is not in array $mot -> adding + incrementing lettres 
     ((lettres[char]++)) 
     echo ${lettres[$char]} 
     #Adding to $mot 
     mot[${#mot[@]}]=$char 
    fi 
    echo "<$char>" 
done 
+1

Вместо того, чтобы говорить «Нет, не работает ...», а затем размещать какой-то код без дополнительного комментария, делать проверочный пример, указывать на соответствующие строки, говорить, что вы пытались, что происходит и что вы ожидали произойдет. Например. «lettres [F] на этой строке 3. Я попробовал ваше предложение на следующей строке здесь, но потом все равно 3, пока я ожидал, что это будет 4" –

ответ

5

Использование Баш версии 4 и выше, это будет работать:

$ declare -A lettres 
$ char=B 
$ ((lettres[$char]++)) 
$ echo "${lettres['A']}" 
0 
$ echo "${lettres['B']}" 
1 

(()) заставить arithmetic context, в которой вы можете увеличить значение массива элемент. Обратите внимание, что также recommended to use declare -A гарантирует максимальную обратную совместимость со стандартными индексированными массивами.

Смежные вопросы