Bash 数组值在 while 循环内不同

问题描述 投票:0回答:1

我有一个非常简单的 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: 

我不明白为什么无法在循环之外显示数组的内容。任何建议将不胜感激。

arrays linux bash loops shell
1个回答
0
投票

解决方法如下:

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,这意味着脚本中看不到管道中生成的变量

© www.soinside.com 2019 - 2024. All rights reserved.