【发布时间】:2017-05-04 23:26:52
【问题描述】:
如果我想在 bash 中分别传递关联数组的键和值,并使用类似
./foo.py -k "${!args[@]}" -v "${args[@]}"
它们会以相同的顺序出现吗?我真的不在乎其他 k=v 对存储在什么中,但我确实需要知道我是否可以指望键和值出现,这样键数组中的第 3 项实际上是值数组中的第三项。
我知道关联数组是“无序的”,并且无论您将它们添加到数组中的任何顺序都与它们的输出方式无关,但我想知道底层存储行为是否意味着它们将始终以相同的顺序输出.
【问题讨论】:
-
不是答案,因为我必须审核代码才能提供答案。但是,如果不是这样,我会非常感到惊讶,如果只是因为产生不同的排序需要看似不必要的努力(只要数组在扩展之间没有被修改)。
-
@chepner:你不能得出这个结论。我不了解 bash,但在其他语言中,有些保持顺序,有些则不保持,具体取决于实现。在其他情况下,这甚至可能在版本之间发生变化。例如,Tcl - 直到(我认为)版本 8.5 - 保证订单被保留,但他们后来改变了它。
-
您是否声称 Tcl 在每次访问时都会执行哈希随机化之类的操作?如果
name在两次调用之间根本没有修改,那么array get name在每次调用时可以返回不同的列表? -
您可能应该选择一个答案。
标签: arrays bash shell associative-array