我想做一个类似的脚本:
#!/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
我猜它很明显,但我想做的是使用双重间接引用来操作函数内部的数组,然后在外面使用它。 无法正常工作 :(
任何人都知道实现这个目标的方法吗?
答案 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的初始“旧”内容并尝试它:)