Linux 仅当尚未在中时才使用bash向数组添加值
正如我所说的标题。我尝试了以下代码: 雷区= 而IFS=读取-r行 做 areaName=$awk-F;'{打印$3}' echo$areaName 如果[[!${areasArray[@]}=~$areaName]];然后 areasArray+=$areaName echo${areasArray[*]} fi 完成<$reportFile $reportFile指的是如下所示的CSV文件:Linux 仅当尚未在中时才使用bash向数组添加值,linux,bash,Linux,Bash,正如我所说的标题。我尝试了以下代码: 雷区= 而IFS=读取-r行 做 areaName=$awk-F;'{打印$3}' echo$areaName 如果[[!${areasArray[@]}=~$areaName]];然后 areasArray+=$areaName echo${areasArray[*]} fi 完成
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的内容对区域进行迭代;做完成。