Linux 仅当尚未在中时才使用bash向数组添加值

Linux 仅当尚未在中时才使用bash向数组添加值,linux,bash,Linux,Bash,正如我所说的标题。我尝试了以下代码: 雷区= 而IFS=读取-r行 做 areaName=$awk-F;'{打印$3}' echo$areaName 如果[[!${areasArray[@]}=~$areaName]];然后 areasArray+=$areaName echo${areasArray[*]} fi 完成

正如我所说的标题。我尝试了以下代码:

雷区= 而IFS=读取-r行 做 areaName=$awk-F;'{打印$3}' echo$areaName 如果[[!${areasArray[@]}=~$areaName]];然后 areasArray+=$areaName echo${areasArray[*]} fi 完成<$reportFile $reportFile指的是如下所示的CSV文件:

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

阵列看起来是这样的:US US US UK FR UK FR。但我希望每个区域只有在不存在的情况下才被添加。所以它看起来应该是这样的:美国英国FR。我该怎么做?谢谢。

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

declare -A areasArray

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

除非只有在密钥不存在时才需要执行特定操作,否则可以跳过if;areasArray[$areaName]=是幂等的。

我不明白areasArray[$areaName]=应该做什么。。。那么,我应该如何将区域添加到数组中呢?它将刚刚读取的区域映射为空字符串。我们对与键相关联的值不感兴趣,只对键区域本身感兴趣。稍后,您可以在${!areasArray[@]}中使用类似于for area的内容对区域进行迭代;做完成。