引用循环外的数组

时间:2014-02-26 14:06:29

标签: arrays loops unix reference echo

所以我有一些看起来像这样的东西:

a=1
declare -a array
cat ~file | while read line
do
array[$a]=$line
let a=$a+1
echo ${array[(($a - 1))]}
done

read n
m=$n
echo ${array[$m]}

当我在循环中回显数组时,它可以工作,但是当我尝试在循环之外引用它时,它不起作用。有人可以告诉我为什么吗?第二个echo不返回数组的值。

1 个答案:

答案 0 :(得分:0)

这是因为数据存储在子shell中,就像执行cat ~file | while ...一样。

要防止它,请执行:while do ... done < file。另请注意,您可以使用简单的$((a+1))甚至$((a ++))来增加:

a=1
declare -a array
while read line
do
   array[$a]=$line
   $((a+1))
   echo ${array[(($a - 1))]}
done < ~file