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

Can compound variables be used as function arguments in ksh?

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

func(){
    print ${1.a}  #reference argument object members. output would be 'dog'
    newObject=  #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中的一个复合变量(像一个对象)。

不得不除掉 ksh 蜘蛛网的灰尘...

有几个步骤:

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

一个示例如下:

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

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

这是一个ksh fiddle