数组 + 为什么数组不在正确的位置

数组 + 为什么数组不在正确的位置

我将名为“disks”的数组设置为以下单词 - sdb sdc sdd

在 bash shell 中:

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

相关内容