2

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

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

我想要做的是获取第三个变量并将其分配给一个或另一个,例如:

usethisarray=$FIRST

或许

declare -a usethisarray=$FIRST

但这些都没有真正起作用。我可以获得一定程度的间接指向我需要的关联数组吗?

4

5 回答 5

5

bash 具有可变间接性,但使用起来有点痛苦:

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

$ item=${alias}[foo]
$ echo ${!item}
bar
于 2013-06-14T00:19:19.737 回答
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]}
于 2013-06-14T00:08:57.200 回答
0

我想这就是你的意思:

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

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

[bob in ~] echo $ARRAY[ ] one[ ]

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

[bob in ~] ARRAY[3]=四

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

参考如下:

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

于 2013-06-13T23:57:17.007 回答
0

字符串变量间接

ARRAY=([a]=1 [b]=2 [c]=3)

name="ARRAY"

eval a=\${$name['a']}

eval b=\${$name['b']}

eval c=\${$name['c']}

echo "$a$b$c"

Output>>> 123

eval $array['a']=10             

echo ${ARRAY['a']}


Output>>> 10
于 2018-04-17T14:02:15.467 回答
0

答案是肯定的,并且引用变量需要是nameref才能与数组一起使用:

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

#### ordinary variable assignment does NOT work
declare any_var=FIRST
echo -e '${any_var[@]}:' "${any_var[@]}"
echo -e '${!any_var[@]}:' "${!any_var[@]}"
echo -e '${#any_var[@]}:' "${#any_var[@]}"

#### nameref works, via 'declare -n' or 'local -n'
declare -n arr_ref=SECOND
echo '${arr_ref[@]}:' "${arr_ref[@]}"
echo '${!arr_ref[@]}:' "${!arr_ref[@]}"
echo '${#arr_ref[@]}:' "${#arr_ref[@]}"

结果:

普通变量赋值不起作用

${any_var[@]}: FIRST
${!any_var[@]}: 0
${#any_var[@]}: 1

nameref 工作,通过 'declare -n' 或 'local -n'

${arr_ref[@]}: monde ba
${!arr_ref[@]}: bonjour fu
${#arr_ref[@]}: 2

https://www.gnu.org/software/bash/manual/bash.html#Shell-Parameters

不能为数组变量赋予 nameref 属性。但是,nameref 变量可以引用数组变量和下标数组变量。

同时,可变间接,或更准确地说是间接扩展,使用起来并不痛苦,只是不适合这种用例:

如果 parameter 的第一个字符是感叹号 (!),并且 parameter 不是 nameref,则它引入了间接级别。

于 2021-11-22T18:03:21.427 回答