我正在尝试使用 Debian Gnu-Linux 12.4、22.12.3 和 Bash 5.2.15 构建一个关联数组,其中数组中的键值对引用同一数组中的其他键值对。
例子,
declare -A test=(
[0]=0
[1]=1
[2]=2
[3]=$((test[1]+test[2]))
[4]="${test[1]} ${test[2]}"
)
当我在 Konsole 中执行以下 echo 语句时,
echo "${test[1]}"
echo "${test[2]}"
echo "${test[3]}"
echo "${test[4]}"
我有时会得到这样的结果,
1
2
0
有时我得到了我想要的
1
2
3
1 2
由于这种不一致(这可能完全是我的行为造成的),我有几个问题。
- 这可以做到吗?
- 如果是,有正确的方法吗?
另外,我找不到一致的方法来复制这两个不同的结果,无论发生什么或如何发生。
不是您想要做的方式,因为变量引用不存储在数组中 - 相反,它们会立即作为“字符串文字”表达式的一部分进行计算 - 因此在计算引用时,分配给
test
还没有完成。(与许多其他编程语言相同!)(尽管语法相似,但只有
test=…
ortest[3]=…
是实际的变量赋值,而 the( [0]=… )
不是——Bash 的数组键/值语法仅模仿真实的test[3]=…
赋值语法,但在其他语言中,完全相同的概念通常看起来相似test = { "0": 1234 }
或相似。)您将需要多次作业才能正确完成:
上例中的四个操作中的每一个都是一个单独的赋值;首先处理所有变量引用和其他扩展,然后更新 的
$
值。test
如果您从示例中的扩展中得到结果,则它正在使用先前分配的值。在赋值之前(和之后)放置一个
declare -p test
以查看存储了哪些值。为了确保实验的一致性,请
unset test
在每次尝试之前执行此操作。