我有一個非常簡單的sh
腳本,我在這裏製作系統cat
調用,收集結果並解析一些相關信息,然後將信息存儲在array
中,這似乎工作得很好。但是,只要我退出存儲信息的for循環,array
似乎就清楚了。我想知道是否在for循環之外錯誤地訪問array
。我的腳本的相關部分:Shell Array清除原因不明
#!/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
大小會增加,我可以檢查該項目是否已添加。在for循環結束後我檢查array
像這樣:
echo "RESULTING ARRAY:"
echo "length of array: ${#QSPI_ARRAY[@]}"
for qspi in "${QSPI_ARRAY}"
do
echo "qspi instance: $qspi"
done
這裏是我的結果,echo
d我顯示:
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:
編輯:一些調試之後,似乎我有莫名其妙地在這裏兩個不同的array
。我初始化了array
,如下所示:QSPI_ARRAY=("a" "b" "c" "d" "e" "f" "g")
,然後在for循環中解析array
後,它仍然是a,b,c等。我怎麼在這裏有兩個不同的arrays
?
你的家當,如果它完全被使用,需要是'#!/ bin/bash'。 '/ bin/sh'不支持數組。 – chepner