Expansão de matriz

5

Estou tendo resultados inesperados na expansão de uma matriz. Espero que alguém possa esclarecer por que estou vendo o que estou vendo. Eu estou tentando preencher um array usando o fdisk -l para preenchê-lo e apenas obter um único elemento. O código:

#!/bin/bash
declare -a PARTITIONS=();

PARTITIONS=$(fdisk -l ubuntu-minimal-16.04-desktop-armhf-raspberry-pi-2.img | grep -i ubuntu-minimal-16.04-desktop-armhf-raspberry-pi-2.img | sed '/Disk/d' | cut -d " " -f1)

echo "PARTITIONS[@]:${PARTITIONS[@]}"

echo "ELEMENT 0: ${PARTITIONS[0]}"

echo "ELEMENT 1: ${PARTITIONS[1]}"

Saída:

 PARTITIONS[@]:ubuntu-minimal-16.04-desktop-armhf-raspberry-pi-2.img1 ubuntu-minimal-16.04-desktop-armhf-raspberry-pi-2.img2

 ELEMENT 0: ubuntu-minimal-16.04-desktop-armhf-raspberry-pi-2.img1 ubuntu-minimal-16.04-desktop-armhf-raspberry-pi-2.img2

 ELEMENT 1: 

Não há elemento 1. O que estou fazendo errado?

    
por TheeMahn 15.07.2016 / 20:03

2 respostas

6

Ao atribuir a uma matriz:

array=( elements )

Ou seja,

PARTITIONS=( $(fdisk ... ) )
    
por 15.07.2016 / 20:09
5

Quando uma string é atribuída a uma matriz, ela é atribuída ao primeiro elemento. Observe:

$ declare -a x
$ x=$(date)
$ declare -p x
declare -a x='([0]="Fri Jul 15 11:09:59 PDT 2016")'

Aqui $(date) é a string resultante da substituição de comando. (É como o pipeline do fdisk, mas é mais simples.) declare -p é usado aqui para mostrar o conteúdo exato de uma variável bash.

Se você quiser dividir palavras na string, use parênteses assim:

$ x=($(date))
$ declare -p x
declare -a x='([0]="Fri" [1]="Jul" [2]="15" [3]="11:10:08" [4]="PDT" [5]="2016")'
    
por 15.07.2016 / 20:11

Tags