繁体   English   中英

与 ksh93 中的功能和关联 arrays 混淆

[英]Mess with functions and associative arrays in ksh93

这是我的简单数组:

typeset -A foo

foo["first"]="first Value"
foo["second"]="second Value"

我想做一个 function 来选择这个数组,做一些事情并将它返回给脚本。 例如

function changeThat {
    eval tmp=\$$1
    tmp["$2"]=$3
    return $tmp
}

我可以在脚本中使用 go 并执行以下操作:

foo=changeThat foo "first" "a new first value"

并得到一个漂亮的结果

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

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

谢谢!

您可以像这样定义您的 function:

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

  ref["$key"]="$value"
}

typeset -n ref将 ref 变量定义为对其值指定的变量的引用。

当您调用 function 时:

changeThat foo this "mow the lawn"

function 中的变量 ref 更改引用了变量 foo。 现在使用 ref 就像使用 foo 一样。 调用 changeThat 后

    print ${foo["this"]}

现在将 output “修剪草坪”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM