variables设置在一个bash'read'循环之后,它没有设置

我尝试下面的代码将命令输出存储在数组中,但数组元素不能在“while循环”之后打印我的意思是在我的代码的最后一行是我的代码中有任何问题?

#! /bin/bash ls -a | while read line do array[$i]="$line " echo ${array[ $i ]} ((i++)) done echo ${array[@]} <------------ 

Solutions Collecting From Web of "variables设置在一个bash'read'循环之后,它没有设置"

问题是你添加一个 shell的元素。 详细说明:

 command1 | command2 

导致command2在一个独立的执行环境的子shell中执行。 这意味着command2中设置的变量对当前 shell不可用,其执行环境不受影响。 你可以改用流程替代来达到相同的效果:

 while read line; do ... done < <(ls -l) 

请注意,不建议分析ls 。 尝试使用find