如何在ksh中使用间接引用来操作数组?

时间:2011-08-16 19:53:26

标签: arrays shell reference ksh

我想做一个类似的脚本:

#!/usr/bin/ksh93    
typeset -A foo

function fillItUP {
    typeset -A newarr
    newarr["this"]="bar"
    newarr["another"]="tut"

    inputarrayname=$1

    nameref $inputarrayname=newarr
}

输出排序:

fillItUP "foo"
echo ${foo["this"]}
bar

我猜它很明显,但我想做的是使用双重间接引用来操作函数内部的数组,然后在外面使用它。 无法正常工作 :(

任何人都知道实现这个目标的方法吗?

1 个答案:

答案 0 :(得分:1)

感谢您的解释。我明白你要做什么。

现在这是工作代码

#!/usr/bin/ksh93
typeset -A foo
foo["this"]="old bar"
foo["another"]="old tut"

function fillItUP {
    nameref newarr=$1
    newarr["this"]="bar"
    newarr["another"]="tut"
    ## nameref newarr=$1


}
fillItUP foo
echo ${foo["this"]}

typeset -n的nameref的整个想法是将变量从一个范围提供给另一个范围。在您的示例代码中,您首先将一个本地数组分配给您的函数fillItUP(注意:为什么本地??在... typeset and scope上读取此内容),然后尝试将本地数组指向foo。如果你想改变foo ..你需要让局部变量指向foo然后改变它。

如果您取消注释“已注释的nameref”并评论“未注释的nameref” 你会看到foo的值仍然是“老吧”。 如果你按原样执行我添加的代码,你会看到foo [this] = bar而不是“old bar”的值

希望这会有所帮助。

注意:您可以注释掉foo的初始“旧”内容并尝试它:)