解析 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 salad
和grape juice
)。我假设这个问题源于我对 bash 中 IFS、while 循环和解析的工作方式的误解,但我不知所措,无法理解我遗漏了什么。
感谢您的任何见解。
编辑:在 dict.csv 的内容中打错了字,3 现在包含 banana sandwich
而不是之前所述的 banana salad
。这是问题中的错字,而不是我的代码中的错字。抱歉。
我发现了我的问题。感谢 Barmar 指出这一点。我的 dict.csv 没有以导致解析错误的换行符结尾。还有其他问题,但与此问题无关。感谢您的帮助!
我在工作中引用 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 salad
和grape juice
)。我假设这个问题源于我对 bash 中 IFS、while 循环和解析的工作方式的误解,但我不知所措,无法理解我遗漏了什么。
感谢您的任何见解。
编辑:在 dict.csv 的内容中打错了字,3 现在包含 banana sandwich
而不是之前所述的 banana salad
。这是问题中的错字,而不是我的代码中的错字。抱歉。
我发现了我的问题。感谢 Barmar 指出这一点。我的 dict.csv 没有以导致解析错误的换行符结尾。还有其他问题,但与此问题无关。感谢您的帮助!