我在扩展数组时得到了意想不到的结果。我希望有人能够解释为什么我会看到我所看到的。我正在尝试使用 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 )
IE,
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")'