在这个非常简化的示例中,我需要处理数组元素的键和值:

declare -A writer
writer[H.P.]=Lovecraft
writer[Stephen]=King
writer[Clive]=Barker
writer[Jack]=Ketchum

for i in ${!writer[@]}
do
    echo "$i ${writer[$i]}"
done

fullname()
{
    pointer=$1[@]
    for i in "${!pointer}"
    do
        echo "? $i"
    done
}
fullname writer

该函数必须以与示例循环相同的格式显示输出,并且它应该接收数组名称,键列表或值,而我尝试了所有这些操作,但均未成功。任何建议,不胜感激。

最佳答案

indir_keys() {
    eval "echo \${!$1[@]}"
}

indir_val() {
    eval "echo \${$1[$2]}"
}

fullname()
{
    pointer=$1
    for i in $(indir_keys $pointer)
    do
        echo "$i $(indir_val $pointer $i)"
    done
}

给出:
Jack Ketchum
Clive Barker
Stephen King
H.P. Lovecraft

关于arrays - Bash对关联数组的间接引用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27456950/

10-14 04:35