Arrays ksh93中的函数和关联数组混乱

Arrays ksh93中的函数和关联数组混乱,arrays,shell,ksh,Arrays,Shell,Ksh,这是我的简单数组: typeset -A foo foo["first"]="first Value" foo["second"]="second Value" 我想做一个函数,它会选择这个数组,做一些事情,然后将它返回到脚本中。e、 g function changeThat { eval tmp=\$$1 tmp["$2"]=$3 return $tmp } 我有一种方法可以在脚本中进行,并执行以下操作: foo=changeThat foo "first" "

这是我的简单数组:

typeset -A foo

foo["first"]="first Value"
foo["second"]="second Value"
我想做一个函数,它会选择这个数组,做一些事情,然后将它返回到脚本中。e、 g

function changeThat {
    eval tmp=\$$1
    tmp["$2"]=$3
    return $tmp
}
我有一种方法可以在脚本中进行,并执行以下操作:

foo=changeThat foo "first" "a new first value"
得到一个很好的结果,比如

echo ${foo["first"]}
a new first value
现在这不起作用了。。。嗯,我知道语法可能不太正确。但是我真的迷失在了
evals
和scape
echo
的细微差别中(这并不是说我从灵魂深处讨厌它)。此外,我的参考资料是针对ksh的,而且不会是我第一次错过一些技巧-例如,到目前为止,我一直在
ksh88
,它甚至没有关联数组,而大多数人说它应该。结果表明,我的AIX框不符合要求-_-


谢谢

您可以这样定义您的函数:

function changeThat {
  typeset -n ref="$1"
  typeset key="$2"
  typeset value="$3"

  ref["$key"]="$value"
}
typeset-n ref
将ref变量定义为对其值指定的变量的引用

对函数进行此调用时:

changeThat foo this "mow the lawn"
函数change中引用变量foo的变量ref。现在使用ref就像使用foo一样。打过电话之后

    print ${foo["this"]}
现在将输出“修剪草坪”