这是我的简单数组:
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盒子不同意。 -_-
谢谢!
答案 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"]}
现在将输出“割草坪”。