在Bash中将索引数组转换为关联数组

时间:2014-02-11 03:25:00

标签: bash associative-array

目前,我正在努力寻找以下任何一个问题的解决方案:

  1. 如何将普通数组(索引从0开始的索引数组)转换为关联数组,其中value成为键,值本身就是值。
  2. 从索引数组创建一个新的assoc数组,其中值是键。这只是一个声明。我知道使用循环可以很好地完成,但对于包含近500,000个元素的大型数组,循环是一个开销。
  3. 从mysql sql查询的结果创建一个关联数组。我通常从mysql sql查询结果创建一个索引数组,如下所示:

    mapfile -t a_dummy <<< "$(mysql -u root –disable-column-names –silent -B -e "select * from dummy_tbl;" "$DB_NAME")

  4. 其中$ DB_NAME是指向数据库名称字符串的变量。

1 个答案:

答案 0 :(得分:2)

这是使用sed的一种方法。请注意,这仅在原始数组的任何元素都不包含空格时才有效。

declare -A "newArray=( $(echo ${oldArray[@]} | sed 's/[^ ]*/[&]=&/g') )"

sed命令将每个数组元素'x'替换为字符串'[x] = x',适用于关联数组赋值。