Extension de réseau

J'ai des résultats inattendus dans l'expansion d'un tableau. J'espère que quelqu'un peut faire la lumière sur la raison pour laquelle je vois ce que je vois. J'essaie de remplir un tableau en utilisant fdisk -l pour le remplir et en obtenant un seul élément. Le code:

#!/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]}" 

Sortie:

  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: 

Il n'y a pas d'élément 1. Qu'est-ce que je fais mal?

Lors de l'affectation à un tableau:

 array=( elements ) 

C'est à dire,

 PARTITIONS=( $(fdisk ... ) ) 

Lorsqu'une string est affectée à un tableau, elle est affectée à son premier élément. Observer:

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

Ici $(date) est la string qui résulte de la substitution de command. (C'est comme votre pipeline fdisk mais plus simple.) declare -p est utilisé ici pour montrer le contenu exact d'une variable bash.

Si vous voulez séparer les mots de la string, utilisez parens comme ceci:

 $ x=($(date)) $ declare -px declare -ax='([0]="Fri" [1]="Jul" [2]="15" [3]="11:10:08" [4]="PDT" [5]="2016")'