与ksh93中的函数和关联数组混淆

时间:2011-08-16 18:42:21

标签: 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" "a new first value"

得到一个漂亮的结果,如

echo ${foo["first"]}
a new first value

现在这不起作用......好吧,我知道语法可能不太对。但是我真的迷失了evals和scape echo的细微差别(并不是说我从灵魂深处讨厌它)。此外,我的参考是bash,并且不会是我第一次错过ksh时的一些技巧 - 例如,我在ksh88已经到目前为止了,甚至都没有有关联数组,而大多数人都说它应该。事实证明我的AIX盒子不同意。 -_-

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以像这样定义您的功能:

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"

函数changeThat中的变量ref引用变量foo。使用ref现在就像使用foo一样。在调用changeThat

之后
    print ${foo["this"]}

现在将输出“割草坪”。