1

我正在尝试获取文件并将文件中的项目存储到 bash 中的关联数组中。关联数组可能不是我行动的最佳方案,但从我的研究来看,它似乎很合适。我有一个如下所示的文件:

personid
phone
phone
phone
personid
phone
phone
phone

请注意,persionid 始终为 20 位,phone 始终为 10。此文件中没有其他内容,也没有空格,每行只有一个。我想将这些映射到一个关联数组,其中我的键是 personid,我的值是电话。

我为这篇文章编写的代码如下:

declare -A person

while read key; do

    if [ ${#key} -eq 20 ] ; then
        personID="$key"
    else
       phone="$key"
    fi

    person=( ["$personID"]="$phone" )

done < myFile.txt

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

它将正确存储和打印一个 personID 作为键和一个电话作为值....但是电话应该有多个值。我在想,当我分配人员时,我一定是做错了,或者放错了位置。但是我已经玩了很长一段时间了,但无法做到正确。以前从未使用过关联数组,所以有点麻烦。在此先感谢您的帮助!

4

1 回答 1

1

关联数组与任何其他数组没有什么不同,因为从键(或索引)到值的映射总是精确的 1:1。在您的情况下,您需要从键(personID)到值(电话号码)的 1:many 映射。一种方法是简单地存储电话号码列表,该列表实际上是映射到 personID 的“单个”值。您可以使用空格、逗号分隔符或其他任何东西来构建您的列表。

例如,如果您想 : 作为分隔符,您可以这样做将每个电话号码添加到列表中:

if [ -n ${person[$personID]} ] ; then
    person[$personID]}="${person[$personID]}:$phone"
else
    person[$personID]}="$phone"
fi
于 2013-10-11T00:01:24.517 回答