Bash - 关联数组中的值指针?

Gre*_*n23 2 arrays bash pointers associative-array

是否有一种方法Bash,使一个指针的关键在一个关联数组?像这样:

declare -A mapp
mapp=( ["key"]="${value}" )

for k in "${!mapp[@]}"; do 
    pointer="${mapp["${k}"]}"   # How do I do this?
done
Run Code Online (Sandbox Code Playgroud)

通常,您不需要使用指针,但我很想知道是否有办法制作指针.

在更简单的情况下(即,对于普通/字符串变量),我会做一个像这样的指针:

pointer=b
read -p "Enter something: " b
eval pointer=\$${pointer}
Run Code Online (Sandbox Code Playgroud)

我如何为关联数组执行此操作?这不起作用(跳过strikethroughed代码):

declare -A mapp
mapp=( ["first"]="${a}"  ["second"]="${b}" )

for k in "${!mapp[@]}"; do 
    v=mapp["${k}"]

    read -p "Enter ${k}: " new

    eval v=\$${v}    # Doesn't work

done
Run Code Online (Sandbox Code Playgroud)

declare -A mapp
mapp=( ["first"]="${a}"  ["second"]="${b}" )

for k in "${!mapp[@]}"; do 
    v=mapp["${k}"]

    read -p "Enter ${k}: " k

    eval v=\$${v}    # Doesn't work

done
Run Code Online (Sandbox Code Playgroud)

这也不起作用(跳过strikethroughed代码):

declare -A mapp
mapp=( ["first"]="${a}"  ["second"]="${b}" )

for k in "${!mapp[@]}"; do 
    v=mapp

    read -p "Enter ${k}: " new

    eval v=\$${v["${k}"]}    # Doesn't work (and has terrible readability)

done
Run Code Online (Sandbox Code Playgroud)

declare -A mapp
mapp=( ["first"]="${a}"  ["second"]="${b}" )

for k in "${!mapp[@]}"; do 
    v=mapp

    read -p "Enter ${k}: " k

    eval v=\$${v["${k}"]}    # Doesn't work (and has terrible readability)

done
Run Code Online (Sandbox Code Playgroud)

che*_*ner 8

bash4.3中,您可以使用nameref:

$ mapp=([key]=value)
$ declare -n x=mapp[key]  # NO dollar sign!
$ x=7
$ echo ${mapp[key]}
7
Run Code Online (Sandbox Code Playgroud)

在4.3之前,您需要以declare不同方式使用该命令来执行间接操作.

$ mapp=([key]=value)
$ x=mapp[key]  # NO dollar sign!
$ declare "$x=7"
$ echo ${mapp[key]}
7
Run Code Online (Sandbox Code Playgroud)