この配列関連コードは、なぜ各行の終わりにインデックスを印刷するのですか?

この配列関連コードは、なぜ各行の終わりにインデックスを印刷するのですか?

BASHで配列を使用する際に問題があります。問題を次のコードに単純化しました。

#! /bin/bash

A1[0]="user1 user2 user3" 
A1[1]="user4 user5 user6"

for each in ${!A1[*]} 
do
        echo -n "$each "
        echo $A1[$each] 
done

出力は次のとおりです。

0 user1 user2 user3[0]
1 user1 user2 user3[1]

なぜすべての行に[X](おそらく配列要素を表す)があるのか​​理解できません。インデックスを追加せずに配列からインデックスとデータ行を回復する方法は?

答え1

* では、bash次のように中括弧を使用する必要があります。

echo ${A1[$each]}

[$each]配列に添え字を追加しますA1

一人当たりクリティカル(1):

$ {name [subscript]}を使用して、配列内のすべての要素を参照できます。パス名拡張との競合を防ぐには、中かっこが必要です。

続けましょう:

添え字なしで配列変数を参照することは、添字0を持つ配列を参照するのと同じです。

これが元のコードがうまくいかない理由です。中かっこを使用する場合にのみ、シェルが下付き文字を表示するためです。

だから

echo $A1[$each]

等しい

echo ${A1[0]}[$each]

角かっこは特別な意味がないので、そのまま出力されます。

  • このオプションが設定されている場合kshzshKSH_ARRAYS

関連情報