我尝试下面的代码将命令输出存储在一个数组中 但是" while循环"之后无法打印数组元素。 我的意思是在我的代码的最后一行 我的代码有什么问题吗?
#! /bin/bash
ls -a | while read line
do
array[$i]="$line "
echo ${array[ $i ]}
((i++))
done
echo ${array[@]} <------------
答案 0 :(得分:2)
问题是您在 sub shell中添加了元素。详细说明:
command1 | command2
导致command2
在子shell中执行,子shell是一个单独的执行环境。这意味着command2
中设置的变量不可用于当前 shell,其执行环境不受影响。您可以改为使用流程替换来实现相同的目标:
while read line; do
...
done < <(ls -l)
请注意,不建议使用parsing ls
;请尝试使用find
。