解析csv在bash中创建哈希表会导致意外功能

问题描述 投票:0回答:1

我参考的是How to define hash tables in Bash?。我正在尝试解析包含如下测试数据的dict.csv文件:

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

然后使用Bash 4解决方案,创建键/值字典。这是我当前的代码(请注意,键/值在反转时是故意的):

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)。我以为这个问题是由于我对IFS,while循环和bash的解析方式的误解引起的,但我不知所措,无法理解我所缺少的内容。

谢谢您的见解。

编辑:在dict.csv的内容中输入错误,现在3包含banana sandwich,而不是前面提到的banana salad。这是问题的错字,而不是我的代码。抱歉。

bash parsing hashtable
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.