"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