Ao atribuir a uma matriz:
array=( elements )
Ou seja,
PARTITIONS=( $(fdisk ... ) )
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?
Ao atribuir a uma matriz:
array=( elements )
Ou seja,
PARTITIONS=( $(fdisk ... ) )
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")'