0

私はこの配列を持っています:

declare -A modeAndAction
modeAndAction[category]=create
modeAndAction[attribute]=create
modeAndAction[customers]=create
modeAndAction[newsletter]=create
modeAndAction[vouchers]=create
modeAndAction[products]=create
modeAndAction[orders]=create

これは次のように出力されます:

Starting import of mode : attribute
With action: create
Starting import of mode : category
With action: create
Starting import of mode : newsletter
With action: create
Starting import of mode : vouchers
With action: create
Starting import of mode : orders
With action: create
Starting import of mode : customers
With action: create
Starting import of mode : products
With action: create

しかし、私はこの出力を期待しています:

Starting import of mode : category
With action: create
Starting import of mode : attribute
With action: create
Starting import of mode : customer
With action: create
Starting import of mode : newsletter
With action: create
Starting import of mode : vouchers
With action: create
Starting import of mode : products
With action: create
Starting import of mode : orders
With action: create

そのため、宣言を無視してすべてが出力に移動しましたが、その理由はわかりません。モード(+そのアクション)を、配列を宣言した順序で正確に呼び出す必要があります。

バッシュのバージョン:

GNU bash, version 4.2.51(1)-release (x86_64-pc-linux-gnu)

//編集 この配列があれば

modeAndAction[AAAAAAAAA]=create;
modeAndAction[B]=create;
modeAndAction[C]=create;
modeAndAction[D]=create;

私はこの出力を得る:

Starting import of mode : B
With action: create
Starting import of mode : C
With action: create
Starting import of mode : D
With action: create
Starting import of mode : AAAAAAAAA
With action: create

そのため、キーの長さで自動ソートされます。

//Edit2 出力を担当するコード

for i in "${!modeAndAction[@]}"
    do
        echo "Starting import of mode : $i"
        echo "With action: ${modeAndAction[$i]}"
    done
4

1 に答える 1