Могут ли составные переменные использоваться в качестве аргументов функции в k sh? - PullRequest
0 голосов
/ 11 апреля 2020

Как вы используете составные переменные в нетривиальных ситуациях, таких как параметры функции в k sh? Является ли это возможным? Как бы вы сделали закомментированные строки в этом примере кода работающими?

func(){
    print ${1.a}  #reference argument object members. output would be 'dog'
    newObject=$1  #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. Это составная переменная (как объект) в k sh.

1 Ответ

1 голос
/ 11 апреля 2020

Пришлось отряхнуть паутину ksh ...

Есть несколько шагов:

  • передать имя переменной (не значение) в функцию
  • в функции используйте typeset -n (или nameref), чтобы позволить функции ссылаться на массив по «локальному» имени

Один пример будет выглядеть так:

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

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

Вот k sh скрипка

...