我有几个不同的关联数组作为变量:
declare -A FIRST=( [hello]=world [foo]=bar )
declare -A SECOND=( [bonjour]=monde [fu]=ba )
我希望能够做的是获取第三个变量并将其分配给其中一个,例如:
usethisarray=$FIRST
或者
declare -a usethisarray=$FIRST
但这两者都不起作用。我可以获得一个间接级别来指向我需要的关联数组吗?
答案 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--;
}
}