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]
角かっこは特別な意味がないので、そのまま出力されます。
- このオプションが設定されている場合
ksh
。zsh
KSH_ARRAYS