Спасибо за объяснение.Я понимаю, что вы пытаетесь осуществить.
Теперь вот рабочий код
#!/usr/bin/ksh93
typeset -A foo
foo["this"]="old bar"
foo["another"]="old tut"
function fillItUP {
nameref newarr=$1
newarr["this"]="bar"
newarr["another"]="tut"
## nameref newarr=$1
}
fillItUP foo
echo ${foo["this"]}
Вся идея nameref typeset -n состоит в том, чтобы передать переменную из одной области видимости вдругой.В своем примере кода вы сначала выделяли локальный массив для своей функции fillItUP
(ПРИМЕЧАНИЕ: почему локальный ?? Прочтите это в ... typeset и scope ), а затем пытались указать локальный массив наFoo.Если вы хотите изменить foo .. вам нужно сделать так, чтобы локальная переменная указывала на foo, а затем изменить его.
Если вы раскомментируете 'commed nameref' и прокомментируете 'uncommented nameref', вы увидите, что значениеФу по-прежнему "старый бар".Если вы выполните код, который я добавил, как есть, вы увидите, что значение, если foo [this] = bar, а не «old bar»
Надеюсь, это помогло.
ПРИМЕЧАНИЕ:Вы можете закомментировать исходное «старое» содержимое foo и попробовать тоже:)