[英]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.