我有一个包含以下名称/值对的变量 ($OUTPUT
):
member_id=4611686018429783292
platform=Xbox
platform_id=1
character_id=2305843009264966985
period_dt=2020-11-25 20:31:14.923158 UTC
mode=all Crucible modes
mode_id=5
activities_entered=18
activities_won=10
activities_lost=8
assists=103
kills=233
average_kill_distance=15.729613
total_kill_distance=3665
seconds_played=8535
deaths=118
average_lifespan=71.72269
total_lifespan=8463.277
opponents_defeated=336
efficiency=2.8474576
kills_deaths_ratio=1.9745762
kills_deaths_assists=2.411017
suicides=1
precision_kills=76
best_single_game_kills=-1
每行以 \n
结尾。
我想遍历它们,并将它们解析成一个关联数组,并通过变量名访问数组中的值:
while read line
do
key=${line%%=*}
value=${line#*=}
echo $key=$value
data[$key]="$value"
done < <(echo "$OUTPUT")
#this always prints the last value
echo ${data['seconds_played']}
这似乎有效,即 key/value
打印正确的值,但是当我尝试从数组中提取任何值时,它总是返回最后一个值(在这种情况下 - 1
).
我觉得我错过了一些明显的东西,但我的头已经撞了几个小时了。
更新:我的特殊问题是我正在运行不支持关联数组的 bash
版本(OSX 上为 3.2.57)。我会在下面标记正确的答案。
最佳答案
如果没有declare -A data
,那么data
就是一个普通数组。 [here]
中的普通数组表达式首先进行扩展,然后进行算术扩展。内部算术扩展未设置变量扩展为 0
。您实际上只是设置 data[0]=something
,因为 data[$key]
是 data[seconds_played]
-> 变量 seconds_played
没有定义,所以扩展为 data[0]
添加 declare -A data
并且它“应该可以工作”。你也可以:
declare -A data
while IFS== read -r key value; do
data["$key"]="$value"
done <<<"$OUTPUT"
关于bash - 在 bash 中动态创建关联数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65115761/