首页 > 解决方案 > 仅在尚未使用 bash 时才向数组添加值

问题描述

正如我所说的标题。我试过这段代码:

    areasArray=()

    while IFS= read -r line
    do
        areaName="$(awk -F ";" '{print $3}')"
        echo $areaName

        if [[ ! " ${areasArray[@]} " =~ " $areaName " ]]; then
            areasArray+=($areaName)
            echo ${areasArray[*]}
        fi
    done < $reportFile

$reportFile指的是一个看起来像这样的 CSV 文件:

something;something;US
something;something;US
something;something;UK
something;something;FR
something;something;UK
something;something;FR

数组将如下所示US US UK FR UK FR:但我希望每个区域只有在它不存在时才被添加。所以它应该看起来像这样US UK FR:我怎样才能做到这一点?谢谢。

标签: linuxbash

解决方案


如果您需要执行查找,请使用关联数组,而不是索引数组。基本上,您将像使用集合一样使用关联数组的键。

declare -A areasArray

while IFS=";" read _ _ areaName _; do
    if [[ ! -v areasArray[$areaName] ]]; then
        areasArray[$areaName]=
    fi
done < "$reportFile"

除非您只想在密钥不存在的情况下采取特定操作,否则您可以跳过if; areasArray[$areaName]=是幂等的。


推荐阅读