Ksh 複合変数参照

Ksh 複合変数参照

コードで何が起こっているのかをよりよく示すために、複合変数と呼ばれるKSH機能を使用したいと思います。

一方、私の興味深い値は数値的に整理された配列として保存されます。次のように、複合変数を配列デリゲートにバインドしたいと思います。

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

しかし、結果的に私は得た。

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

問題は、複合変数を変数参照と共に使用できるかどうか、そうでない場合はintインデックス配列をよりエレガントな方法で使用する方法です。

ベストアンサー1

最も簡単な答えは、NAME=0 SURNAME=1配列の0と1のインデックスの代わりにこれらの変数を設定して使用することですが...

やや冗長な方法で好きなことをすることができます懲戒機能。各変数には定義された関数があり、set()変数が変更されるたびに呼び出されます。でも同様ですget()。したがって、次のことができます。

#!/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[@]}"

personこれは、サブ名と合計の複合変数と.name規則関数を宣言します.surname。これらset()の関数は適切なperson_arrインデックス値を新しい値(in .sh.value)に設定し、get()関数はそれを設定して適切なインデックス値を「返します」.sh.value

この例では、配列バージョンを値に設定し、それを複合名で上書きします。出力は次のとおりです

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

この方法で複数の変数をバインドするには、次のように解決策を見つける必要があります。独自のkshタイプ

おすすめ記事