bash中的有序关联数组

时间:2015-07-02 05:50:31

标签: arrays bash

我可以在bash中执行以下操作:

declare -A data
data[A]="aaa"
data[C]="ccc"
data[B]="bbb"

for i in "${!data[@]}" ; do
    printf "%-20s ---> %s\n" "$i" "${data[$i]}"
done

哪个输出:

A                    ---> aaa
B                    ---> bbb
C                    ---> ccc

也就是说,关联数组被重新排序(我假设在键上使用词典排序,但我不确定),并且丢失了我创建数据的原始顺序。我想改为:

A                    ---> aaa
C                    ---> ccc
B                    ---> bbb

python我会使用OrderedDict代替普通dict。 bash中有类似的概念吗?

2 个答案:

答案 0 :(得分:5)

如前所述,关联数组不是有序的。如果您想在该数组中进行排序,请使用以下解决方法。

declare -A data
data_indices=()
data[A]="aaa"; data_indices+=(A)
data[C]="ccc"; data_indices+=(C)
data[B]="bbb"; data_indices+=(B)

for i in "${data_indices[@]}" ; do
    printf "%-20s ---> %s\n" "$i" "${data[$i]}"
done

答案 1 :(得分:1)

Bash中没有关联数组的定义排序。因此,脚本输出的顺序将是不可预测的。如果你想在数组中存储更多信息,我建议创建另一个使用相同键的并行关联数组。