linux - 仅当尚未添加值时才使用 bash 将值添加到数组

标签 linux 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。我怎样才能做到这一点?谢谢。

最佳答案

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

declare -A areasArray

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

除非您只想在 key 不存在时执行特定操作,否则您可以跳过 ifareasArray[$areaName]= 是幂等的。

关于linux - 仅当尚未添加值时才使用 bash 将值添加到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60043788/

相关文章:

java - 更改浏览器选项卡时,从 Applet 打开的模型对话框位于 Applet 后面

linux - 如何检查 Linux 机器 (Ubuntu) 中的 DB2 安装

linux - 如何在 Linux 中重命名目录中的多个文件并保留扩展名

bash 使用 xpath 解析 XHTML

bash - Dockerfile CMD 指令将在运行后立即退出容器

linux - source 和 dest 路径相同时的一行复制命令

c++ - 为什么 string::append 操作表现奇怪?

bash - 在 bash 中并行运行多个命令

bash - 这个 sed 语法是什么意思? "s/MY_BASE_DIR=\(.*\)/MY_BASE_DIR=${MY_BASE_DIR-\1}/"

c++ - OpenNI: "Open failed: Device is in safe mode. Cannot start any stream!"