一尘不染

在bash“读取时”循环中设置的变量在设置后未设置

linux

我尝试使用下面的代码将命令输出存储在数组中,但是在“ while循环”之后无法打印数组元素,这意味着在代码的最后一行中,我的代码是否存在任何问题?

#! /bin/bash

ls -a | while read line

do
    array[$i]="$line "

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

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

阅读 216

收藏
2020-06-03

共1个答案

一尘不染

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

command1 | command2

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

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

请注意,不建议解析ls。尝试使用find代替。

2020-06-03