Величина отлично для базовой ошибки из ассоциативного массива bash - PullRequest
2 голосов
/ 19 февраля 2011

У меня есть файл с именем a.txt, который выглядит следующим образом

7A1123123asd 14
8aasdasdasd 15

Теперь я написал некоторый bash-код для чтения файла и построения ассоциативного массива из значений в нем

#!/bin/bash
declare -a counter
while read DEAL count; do
    counter["$DEAL"]=$count
done < oasload.job

for i in "${!array[@]}"
do
    echo "key : $i"
    echo "value : ${array[$i]}"
done

К сожалению, когда я бегу, я получаю следующую ошибку

test.sh: line 6: 7A1123123asd: value too great for base (error token is "7A1123123asd")

Любая помощь приветствуется.

Ответы [ 2 ]

4 голосов
/ 19 февраля 2011

Похоже, что bash рассматривает ключи, начинающиеся с цифр, как цифры. Таким образом, пытаясь преобразовать 7А, он теряет силу, потому что А не является действительной цифрой 10. Если вы можете, например, префикс всех ваших ключей с X во всем, это должно исправить.

#!/bin/bash
declare -a counter
while read DEAL count; do
    counter["X$DEAL"]=$count
done < oasload.job

for i in "${!array[@]}"
do
    echo "key : $i"
    echo "value : ${array[$i]}"
done
1 голос
/ 19 февраля 2011

Все выглядит хорошо, за исключением того, что в Bash 4 ассоциативные массивы объявлены с -A.Версии до 4 не поддерживают ассоциативные массивы.Индексированные массивы в любой версии объявляются с использованием -a или создаются автоматически при назначении с использованием синтаксиса, например array[7]="element" или array=(abc def ghi 123 456).

#!/bin/bash
declare -A counter
while read DEAL count; do
    counter["$DEAL"]=$count
done < oasload.job

for i in "${!array[@]}"
do
    echo "key : $i"
    echo "value : ${array[$i]}"
done
...