【发布时间】:2011-01-29 16:38:09
【问题描述】:
为什么这不起作用???
#!/bin/ksh
# array testfunc()
function testfunc {
typeset -A env
env=( one="motherload" )
print -r $env
return 0
}
testfunc # returns: ( one=motherload )
typeset -A testvar # segfaults on linux, memfaults on solaris
testvar=$(testfunc) # segfaults on linux, memfaults on solaris
print ${testvar.one}
注意:我将上述脚本从 print $testvar 更新为 print ${testvar.one},以更准确地显示我想要完成的任务。
我确信以前有人问过这个问题,但我不确定要搜索什么,而且我一直尝试用于关键字的所有内容都没有给我带来任何与我的问题相关的答案。
ksh 版本:
linux: version sh (AT&T Research) 1993-12-28 s+
solaris: version sh (AT&T Research) 93s+ 2008-01-31
更新:
所以另一个问题是,这将在 ksh 93t+ 中运行而不会出现错误,但是它没有正确分配数组。我会从一个函数中分配一个数组吗?我也尝试像这样分配数组:
typeset -A testvar=$(testfunc)
print ${testvar.one}
但这也不能正常工作。
编辑
那么这里发生了什么?
typeset -A env=( one="motherload" two="vain" )
print ${env.one}
print ${env.two}
我以为这就是你定义关联数组的方式,也许我看到的是旧的但谁知道.... 似乎奇怪的行为,因为这会打印出“motherload”和“vain”
【问题讨论】:
-
这叫做复合变量。它类似于结构。我将澄清我的答案中的一个句子。 informit.com/articles/article.aspx?p=99035&seqNum=5
标签: linux shell scripting solaris ksh