复合变量可以用作 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
如何在 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