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