繁体   English   中英

Bash中的关联数组

[英]Associative Arrays in Bash

我正在尝试获取文件并将文件中的项目存储到bash中的关联数组中。 关联数组可能不是我采取行动的最佳途径,但从我的研究看来,这是一个很好的选择。 我有一个如下文件:

personid
phone
phone
phone
personid
phone
phone
phone

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

我为这部分工作的代码如下:

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作为密钥,将一个电话作为值。...但是电话应该有多个值。 我在想,当我分配人时,我一定做错了,或者放置在错误的位置。 但是我已经玩了一段时间了,无法解决问题。 以前从未使用过关联数组,因此有点麻烦。 先谢谢您的帮助!

关联数组与任何其他数组没有什么不同,因为从键(或索引)到值始终始终存在1:1的映射。 对于您的情况,您希望从键(personID)到值(电话号码)的比例为1:1。 一种方法是简单地存储电话号码列表,该列表实际上是映射到personID的“单个”值。 您可以根据需要使用空格,逗号分隔符或其他任何内容来构造列表。

例如,如果您希望使用:作为分隔符,则可以将每个电话号码添加到列表中:

if [ -n ${person[$personID]} ] ; then
    person[$personID]}="${person[$personID]}:$phone"
else
    person[$personID]}="$phone"
fi

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM