私はシステムをcat
と呼んで、結果を収集し、情報を保存する前にいくつかの関連情報を解析して、かなりうまくいくように見える非常に単純なsh
スクリプトを持っています。しかし、私が情報を保存しているforループを終了するとすぐに、array
はそれ自身をクリアしているようです。私はarray
にforループの外で間違ってアクセスしているのだろうかと思います。スクリプトの関連部分:シェル配列が不明な理由で消去されました
#!/bin/sh
declare -a QSPI_ARRAY=()
cat /proc/mtd | while read mtd_instance
do
# split result into individiual words
words=($mtd_instance)
for word in "${words[@]}"
do
# check for uboot
if [[ $word == *"uboot"* ]]
then
mtd_num=${words[0]}
index=${mtd_num//[!0-9]/} # strip everything except the integers
QSPI_ARRAY[$index]="uboot"
echo "QSPI_ARRAY[] at index $index: ${QSPI_ARRAY[$index]}"
elif [[ $word == *"fpga_a"* ]]
then
echo "found it: "$word""
mtd_num=${words[0]}
index=${mtd_num//[!0-9]/} # strip everything except the integers
QSPI_ARRAY[$index]="fpga_a"
echo "QSPI_ARRAY[] at index $index: ${QSPI_ARRAY[$index]}"
# other items are added to the array, all successfully
fi
done
echo "length of array: ${#QSPI_ARRAY[@]}"
echo "----------------------"
done
私の出力はforループを終了するまで素晴らしいです。 forループ内では、array
のサイズが増え、アイテムが追加されたことを確認できます。
dev: size erasesize name
length of array: 0
-------------
mtd0: 00100000 00001000 "qspi-fsbl-uboot"
QSPI_ARRAY[] at index 0: uboot
length of array: 1
-------------
mtd1: 00500000 00001000 "qspi-fpga_a"
QSPI_ARRAY[] at index 1: fpga_a
length of array: 2
-------------
RESULTING ARRAY:
length of array: 0
qspi instance:
EDIT:ここ
echo "RESULTING ARRAY:"
echo "length of array: ${#QSPI_ARRAY[@]}"
for qspi in "${QSPI_ARRAY}"
do
echo "qspi instance: $qspi"
done
私の結果、私のディスプレイにecho
Dは、以下のとおりです。いくつかのデバッグした後、私が持っているようだループの完了後、私はarray
そうのように確認してくださいここに何とか2つの異なるarray
があります。私はarray
を次のように初期化しました:QSPI_ARRAY=("a" "b" "c" "d" "e" "f" "g")
と私のfor-loopの後にはarray
はまだa、b、cなどです。ここでは同じ名前の2つの異なるをどうやって作るのですか?
あなたのシェバング:おそらくこのように、あなたの例のコードの特定の場合には
、私はあなたがややそれを簡略化することができると思う。それでも、このように見えること、一例として
cat
を使用してそれはまったく使われ、 '#!/ bin/bash'である必要があります。 '/ bin/sh'は配列をサポートしません。 – chepner