Referência de variável composta Ksh

Referência de variável composta Ksh

Eu gostaria de usar o recurso KSH chamado variável composta para mostrar melhor o que está acontecendo no código.

Por outro lado, os valores interessantes são mantidos em uma matriz organizada por números. Eu gostaria de vincular a variável composta ao representante da matriz assim

typeset -n person.name=person_arr[0]
typeset -n person.surname=person_arr[1]

Mas como resultado eu consegui

ksh: typeset: person.name: is not an identifier

A questão é se variáveis ​​​​compostas podem ser referenciadas com variáveis ​​​​e, se não, como usar matrizes indexadas int de maneira mais elegante.

Responder1

A resposta mais simples é definir NAME=0 SURNAME=1e usar essas variáveis ​​em vez dos índices 0 e 1 em seu array, porém...

Você pode fazer o que quiser de uma maneira bastante demorada usandofunções de disciplina. Cada variável pode ter uma função set()definida para ela; ele será chamado toda vez que a variável for alterada. Da mesma forma para get(). Então você pode fazer o seguinte:

#!/bin/ksh
typeset -C person
function person.name.set {
    person_arr[0]=${.sh.value}
}
function person.name.get {
    .sh.value=${person_arr[0]}
}
function person.surname.set {
    person_arr[1]=${.sh.value}
}
function person.surname.get {
    .sh.value=${person_arr[1]}
}

typeset -a person_arr
person_arr[0]=first   person_arr[1]=second
echo "name is ${person.name} ${person.surname}"

person.name=first2    person.surname=second2
echo "name is ${person.name} ${person.surname}"
echo "name is ${person_arr[@]}"

Isso declara uma variável composta persone funções de disciplina para os subnomes .namee .surname. As set()funções definem o valor indexado apropriado person_arrpara o novo valor (in .sh.value) e as get()funções "retornam" o valor indexado apropriado configurando .sh.value.

O exemplo define a versão do array para um valor e, em seguida, os substitui pelos nomes compostos. A saída é

name is first second
name is first2 second2
name is first2 second2

Se você tem diversas variáveis ​​que deseja vincular dessa forma, você deve procurar uma solução usandoseu próprio tipo ksh.

Responder2

Em ksh93, nomes de variáveis ​​compostos e namerefsnão combinam, mas funciona ao contrário:

typeset -n First=person.name       
typeset -n Last=person.surname
person.name=John
person.surname=Doe
echo $First $Last
John Doe

informação relacionada