Почему это не работает???
#!/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.one}
с print $testvar
, чтобы более точно показать, чего я пытаюсь достичь.
Я уверен, что об этом спрашивали раньше, но я не уверен, что искать, и все, что я пытался использовать для ключевых слов, не дает мне никаких ответов, связанных с моей проблемой.
кш версия:
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}
Я думал, что именно так вы определили ассоциативные массивы, может быть, то, на что я смотрел, было старым, но кто знает .... кажется странным поведением, поскольку это печатает «материнская нагрузка» и «напрасно»