我有一个非常简单的 shell 脚本,它使用 while 循环从文件中读取值,将它们放入数组中,然后打印数组的内容。每次在 while 循环内添加后,它都会正确显示数组的内容。问题是当我在循环之外查看数组的内容时,表似乎是空的。
以下是脚本内容:
ctr=0
arr=()
cat "alpha.txt" |\
while IFS="," read data
do
arr+=("$data")
echo "$ctr.data: $data"
echo "array inside loop: ${arr[@]}"
let "ctr=ctr+1"
done
echo
echo "+++++"
echo "array outside loop: ${arr[@]}"
echo
echo "${arr[1]}"
echo "${arr[2]}"
alpha.txt的内容:
aaa
bbb
ccc
程序的输出:
0.data: aaa
array inside loop: aaa
1.data: bbb
array inside loop: aaa bbb
2.data: ccc
array inside loop: aaa bbb ccc
+++++
array outside loop:
我不明白为什么无法在循环之外显示数组的内容。任何建议将不胜感激。
解决方法如下:
ctr=0
arr=()
while IFS="," read data
do
arr+=("$data")
echo "$ctr.data: $data"
echo "array inside loop: ${arr[@]}"
let "ctr=ctr+1"
done < "alpha.txt"
echo
echo "+++++"
echo "array outside loop: ${arr[@]}"
echo
echo "${arr[1]}"
echo "${arr[2]}"
以及为什么这是解决方案:
因为管道生成了子shell,这意味着脚本中看不到管道中生成的变量