「disks」という配列を次の単語に設定しました。 - sdb sdc sdd
Bashシェルから:
declare -A disks
Machine=worker01
disks[$Machine]="sdb sdc sdd"
次に、すべての単語を次のように印刷します。
echo ${disks[@]}
sdb sdc sdd
最初の項目を印刷しようとしています(sdbでなければなりません)。
echo ${disks[0]}
しかし、出力はありません
同じ:
echo ${disks[1]}
echo ${disks[2]}
また、以下が付属しています:
echo ${disks[3]}
echo ${disks[4]}
…
ここで何の問題がありますか?
次のように悪い:
for i in {1..100}
> do
> echo ${disks[$i]}
> done
それでは、配列「disks」の最初の単語をどのように印刷しますか?Machine=worker01
echo ${disks[$Machine]}
答え1
に割り当てていますが、disks[worker01]
から読んでみてくださいdisks[0]
。インデックスが異なります。
誰かが言及したように、Bashには実際に必要な多次元配列はありません。スペースで区切られた文字列を使用して大まかにシミュレートできますが、文字列を明示的に分割する必要があります。
#!/bin/bash
declare -A disks
disks["host1"]="sda sdb"
disks["host2"]="sda sdb sdc"
for m in "${!disks[@]}"; do
# split the string to array 'd'
IFS=' ' read -a d <<< "${disks[$m]}"
printf "$m has disk %s\n" "${d[@]}"
done
答え2
Machines
宣言した後に使用しなくなったのはなぜですか?
$ disks=(sdb sdc sdd)
$ echo ${disks[0]}
sdb
$ echo ${disks[1]}
sdc
$ echo ${disks[2]}
sdd
答え3
データは${disks[worker01]}
ではありません${disks[0]}
。
また、配列配列(それぞれディスクアレイを持つコンピュータグループ)を使用しようとしているのかどうか疑問に思います。
答え4
特定の値のみを印刷するには、次を使用できます。
echo ${disks[$Machine]} | awk '{print $1}'
ここで $1 = インデックス 0
出力:
sdb