配列+配列が正しい位置にない理由

配列+配列が正しい位置にない理由

「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

関連情報