如何避免使用while和find的subshel​​l行为?

时间:2019-03-19 11:29:10

标签: bash while-loop find subshell

因为我自己陷入了困境,所以我提出了一个问题,并在此给出了答案。如果find遍历命令找到的内容,则从bash在子shell中执行该命令。因此,您无法在结果中填充数组并在循环后使用它。

1 个答案:

答案 0 :(得分:0)

您必须将语法从以下位置更改:

['A', 'A', 'B', 'C']

i=0
find $cont_dirs_abs -type l -exec test -e {} \; -print0 | while IFS= read -r -d '' lxc_storage_abspath; do
    lxcname=${lxc_storage_abspath##*/}
    ...
    lxcnames[$i]="$lxcname"
    let "i+=1"
done

就我而言,在此循环之后,我可以访问bash数组i=0 while IFS= read -r -d '' lxc_storage_abspath; do lxcname=${lxc_storage_abspath##*/} ... lxcnames[$i]="$lxcname" let "i+=1" done < <(find $cont_dirs_abs -type l -exec test -e {} \; -print0)

$lxcnames

希望对所有人有帮助。