배열 + 배열이 올바른 위치에 있지 않은 이유

배열 + 배열이 올바른 위치에 있지 않은 이유

"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

관련 정보