解析 csv 以在 bash 中创建散列 table 会导致意外功能

Parsing a csv to create a hash table in bash results in unexpected functionality

我在工作中引用 How to define hash tables in Bash?。我正在尝试解析一个 dict.csv 文件,其中包含这样的测试数据:

1,orange
2,apple
3,banana sandwich
4,grape juice
5,strawberry

并使用 Bash 4 解决方案,创建 key/value 字典。 这是我当前的代码(注意 while 中的 key/value 是倒置的,这是故意的):

declare -A dict

fileName="dict.csv"

OIFS=$IFS
IFS=','
while read value key
do
    dict+=( ["$key"]="$value" )
done < $fileName
IFS=$OIFS
echo ${dict["orange"]}
echo ${dict["apple"]}
echo ${dict["banana sandwich"]}
echo ${dict["grape juice"]}
echo ${dict["strawberry"]}

我希望我的输出是:

1
2
3
4
5

但我的输出是:

1
2
3
<blank>
<blank>

我注意到空行的数量等于其中有空格的键的数量(例如banana saladgrape juice)。我假设这个问题源于我对 bash 中 IFS、while 循环和解析的工作方式的误解,但我不知所措,无法理解我遗漏了什么。

感谢您的任何见解。

编辑:在 dict.csv 的内容中打错了字,3 现在包含 banana sandwich 而不是之前所述的 banana salad。这是问题中的错字,而不是我的代码中的错字。抱歉。

我发现了我的问题。感谢 Barmar 指出这一点。我的 dict.csv 没有以导致解析错误的换行符结尾。还有其他问题,但与此问题无关。感谢您的帮助!