Array + porque os arrays não estão no lugar certo

0

Eu configurei um array chamado “disks” para as seguintes palavras - sdb sdc sdd

no bash shell:

declare -A disks
Machine=worker01
disks[$Machine]="sdb sdc sdd"

agora imprimimos todas as palavras da seguinte forma:

echo ${disks[@]}
sdb sdc sdd

agora queremos imprimir o primeiro item (que deve ser sdb)

echo ${disks[0]}

mas sem saída

o mesmo com:

echo ${disks[1]}

echo ${disks[2]}

também com:

echo ${disks[3]}

echo ${disks[4]}

o que está errado aqui?

também não como:

for i in {1..100}
> do
> echo ${disks[$i]}
> done

Então, como posso imprimir as primeiras palavras da matriz "discos" - quando Machine=worker01

echo ${disks[$Machine]}
    
por yael 15.11.2018 / 12:16

4 respostas

4

Você está atribuindo a disks[worker01] , mas tentando ler disks[0] etc. Os índices são diferentes.

Como alguém comentou, o Bash não tem arrays multidimensionais, e é disso que você realmente precisaria aqui. Você pode simular isso com strings separadas por espaço, mas você precisa dividir a string explicitamente.

#!/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
    
por 15.11.2018 / 13:14
1

Por que você declarou Machines quando nunca o usa depois?

$ disks=(sdb sdc sdd)
$ echo ${disks[0]}
sdb
$ echo ${disks[1]}
sdc
$ echo ${disks[2]}
sdd
    
por 15.11.2018 / 12:44
0

Os dados estão em ${disks[worker01]} , não em ${disks[0]} .

Também estou querendo saber se você está tentando usar uma matriz de matrizes: uma matriz de máquinas, cada uma com uma matriz de discos.

    
por 15.11.2018 / 13:05
0

se você está procurando apenas imprimir um valor específico que você pode usar:

echo ${disks[$Machine]} | awk '{print $1}'

em que $ 1 = índice 0

OUTPUT:

sdb
    
por 15.11.2018 / 16:41