1

キーと値のセットを使用して配列を初期化し、値を変更できても新しいキーを追加できないようにしたいと考えています。

4

2 に答える 2

5

直接行う方法はないようです。代わりに、キー (インデックス) を持つ読み取り専用の連想配列を、値を保持する別の非読み取り専用配列に入れることができます。

この方法では、フロント アレイに新しいキーを追加する方法がなく、バック アレイに新しいキーを追加することは可能ですが、フロント アレイ キーを介して到達することはできません。

このようなもの:

declare -r -A front=([a]=0 [b]=1 [c]=2)
declare -a back=(alpha beta gamma)
# Read
echo "${back[front[a]]}"
# Write
back[front[a]]="ALPHA"
# Iterate
for k in "${!front[@]}"; do echo "$k = ${back[front[$k]]}"; done

これを関数インターフェイスにラップできます。

于 2013-11-04T11:02:06.973 に答える
1

ビルトインを使用しreadonlyて、完全に読み取り専用としてマークします。

$ declare -A x
$ x=([foo]=hello [bar]=world)
$ readonly -A x
$ x[baz]=zap
bash: x: readonly variable

しかし、そうすると、既存の値を変更する能力も失われてしまいます。

お探しの機能は存在しません。

于 2013-11-04T10:53:26.277 に答える