배열 확장

배열 확장

배열을 확장할 때 예상치 못한 결과가 나타납니다. 누군가 내가 보는 것을 왜 보는지 설명할 수 있기를 바랍니다. fdisk -l을 사용하여 배열을 채우고 단일 요소만 가져오려고 합니다. 암호:

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

산출:

 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: 

요소 1이 없습니다. 내가 뭘 잘못했나요?

답변1

배열에 할당하는 경우:

array=( elements )

즉,

PARTITIONS=( $(fdisk ... ) )

답변2

문자열이 배열에 할당되면 첫 번째 요소가 할당됩니다. 관찰하다:

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

이는 $(date)명령 대체에 의해 생성된 문자열입니다. (이것은 fdisk 파이프와 비슷하지만 더 간단합니다.) declare -p이것은 bash 변수의 정확한 내용을 보여줍니다.

문자열을 토큰화하려면 다음과 같이 대괄호를 사용하세요.

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

관련 정보