배열을 확장할 때 예상치 못한 결과가 나타납니다. 누군가 내가 보는 것을 왜 보는지 설명할 수 있기를 바랍니다. 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")'