Ksh referência de variável composta

0

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

Por outro lado, meus valores interessantes são mantidos em array organizado por números. Gostaria de vincular a variável composta ao array representativo como este

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

Mas como resultado, consegui

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

A questão é se as variáveis compostas podem ir com referências de variáveis e, se não, como usar arrays indexadas int de maneira mais elegante.

    
por Kamil 26.09.2016 / 09:35

2 respostas

2

A resposta mais simples é definir NAME=0 SURNAME=1 e usar essas variáveis em vez de 0 e 1 índices em sua matriz, no entanto ...

Você pode fazer o que quiser de maneira bastante lenta usando funçõ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 person e funções de disciplina para os subnomes .name e .surname . As funções set() definem o valor indexado person_arr apropriado para o novo valor (em .sh.value ) e as funções get() "retornam" o valor indexado apropriado configurando .sh.value .

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

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

Se você tem várias variáveis que deseja vincular dessa maneira, deve procurar uma solução usando seu próprio tipo de ksh .

    
por 02.10.2016 / 17:37
3

Em ksh93 , os nomes das variáveis compostas e namerefs nã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
    
por 30.09.2016 / 21:30

Tags