配列を展開すると、予期しない結果が表示されます。誰かが私が見るものを見る理由を説明できることを願っています。 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")'