复合变量可以用作ksh中的函数参数吗?

问题描述 投票:0回答:1

如何在非平凡的情况下使用复合变量,例如ksh中的函数参数?可能吗?您如何使此示例代码中的注释行起作用?

func(){
    print ${1.a}  #reference argument object members. output would be 'dog'
    newObject=$1  #assign compound variable to new variable
    echo ${newObject.a} ${newObject.b}  #output would be 'dog cat'
}
obj=( a=dog b=cat )
func $obj  #call function with compound argument

澄清:这不是bash中的关联数组。它是ksh中的复合变量(如对象)。

shell oop ksh
1个回答
1
投票

必须除尘ksh蜘蛛网...

有几个步骤:

  • 将变量名(不是值)传递给函数
  • 在函数中使用typeset -n(或nameref)以允许函数通过“本地”名称引用数组

一个例子如下:

$ func(){
    typeset -n newObject=${1}
    echo ".${newObject.a}.${newObject.b}."
}

$ obj=( a=dog b=cat )
$ func obj
.dog.cat

这里是ksh fiddle

© www.soinside.com 2019 - 2024. All rights reserved.