关于 Bash 关联数组中多个条目的问题

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

我们有一个项目,其中在文件中声明了 Bash 关联数组,例如 def.sh,如下所示

#!/bin/bash

declare -a map=(

    ["Key_A"]='Val_A'

    ["Key_B"]='VAL_B'

)

此文件在终端上通过

source def.sh
获取,然后像这样访问各个元素

export var_a="xyz"

var_b="${map[${var_a}]}"

之所以这样做,与我们正在使用的内部系统和项目的要求有关。

早些时候,当地图只有一个条目时,这工作得很好。

当我们向映射添加第二个条目时(即,当它看起来像上面的代码片段时),该映射始终返回第二个/最后一个条目/对的值。

也就是说,即使我们这样做

export var_a="Key_A"

var_b="${map[${var_a}]}"

echo ${var_b}
给出
VAL_B
。不用说,
"${map[KEY_B]}"
仍然给出
VAL_B

我们尝试过不带引号和不带引号的参数替换(即

"${map[KEY_A]}"
),结果是相同的。

知道为什么会发生这种情况吗?

bash associative-array
1个回答
0
投票

既然你想使用字符串作为索引,你应该使用

declare -A
:

$ declare -A map=(["Key_A"]='Val_A' ["Key_B"]='VAL_B')
$ export var_a="Key_A"
$ echo "${map[${var_a}]}"
Val_A
© www.soinside.com 2019 - 2024. All rights reserved.