你能在bash中为变量分配关联数组吗?

时间:2013-06-13 23:49:26

标签: bash

我有几个不同的关联数组作为变量:

declare -A FIRST=( [hello]=world [foo]=bar )
declare -A SECOND=( [bonjour]=monde [fu]=ba )

我希望能够做的是获取第三个变量并将其分配给其中一个,例如:

usethisarray=$FIRST

或者

declare -a usethisarray=$FIRST

但这两者都不起作用。我可以获得一个间接级别来指向我需要的关联数组吗?

4 个答案:

答案 0 :(得分:4)

bash有variable indirection,但使用起来很痛苦:

$ declare -A FIRST=( [hello]=world [foo]=bar )
$ alias=FIRST
$ echo "${!alias[foo]}"

$ item=${alias}[foo]
$ echo ${!item}
bar

答案 1 :(得分:1)

我认为这是唯一的方法:

#!/bin/bash
declare -A FIRST=( [hello]=world [foo]=bar )
declare -A SECOND=( [bonjour]=monde [fu]=ba )
declare -A usethisarray
for key in ${!FIRST[@]}; do
    usethisarray["$key"]="${FIRST["$key"]}"
done
echo ${usethisarray[hello]}
echo ${usethisarray[foo]}

答案 2 :(得分:0)

我认为这就是你的意思:

[bob in~] ARRAY =(一二三)

[bob in~] echo $ {ARRAY [*]} 一二三

[bob in~] echo $ ARRAY [] 一个[

[bob in~] echo $ {ARRAY [2]} 3

[bob in~] ARRAY [3] =四

[bob in~] echo $ {ARRAY [*]} 一二三四

以下参考:

有关详细信息,请参阅链接: http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_10_02.html

答案 3 :(得分:0)

字符串变量间接

typedef struct iorb {
        int base_pri;
        struct iorb *link;
} IORB;
IORB *head = NULL;
void makeList(IORB **h, int s);
int main(){
        makeList(&head, 15);/* pass head address */
        printf("%d\n", head->base_pri);
        return 0;
}
void makeList(IORB **h, int s){
        while(s > 0){
                IORB *temp = (IORB*)malloc(sizeof(IORB));
                temp->base_pri = (rand() % 20);
                temp->link = (*h);
                (*h) = temp;
                s--;
        }
}