变量设置在bash'阅读'它之后没有设置循环

时间:2014-03-27 04:51:20

标签: linux bash

我尝试下面的代码将命令输出存储在一个数组中 但是" while循环"之后无法打印数组元素。 我的意思是在我的代码的最后一行 我的代码有什么问题吗?

#! /bin/bash

ls -a | while read line

do
    array[$i]="$line "  

        echo ${array[ $i ]}
        ((i++))
done

echo ${array[@]}  <------------

1 个答案:

答案 0 :(得分:2)

问题是您在 sub shell中添加了元素。详细说明:

command1 | command2

导致command2在子shell中执行,子shell是一个单独的执行环境。这意味着command2中设置的变量不可用于当前 shell,其执行环境不受影响。您可以改为使用流程替换来实现相同的目标:

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

请注意,不建议使用parsing ls;请尝试使用find