无法从while循环追加到数组

时间:2018-12-29 18:30:41

标签: shell ksh

我想将所有文件名保存在一个文件夹中,对其进行过滤,然后将它们全部放入一个数组中。

#!/bin/mksh

folder="/home/jj/Music/DOWNLOADS"

query="Post"

list=()

find $folder -name "*.flac" | while read filename; do
    if [[ "${filename#*$query}" != "$filename" ]]; then
        list+=("$filename")
    fi
done

print  ${list[@]}

问题是,如上所示,在循环内附加到数组没有任何作用。在循环之外,它工作正常。

我能够在循环内访问filename变量,并确认它是应为非空值。

对于所有重要的文件,文件名都带有空格,有些文件带有UTF-8字符。

1 个答案:

答案 0 :(得分:0)

好像while循环在子shell中运行,因此它处于不同的作用域中。这样就可以解决。

#!/bin/mksh

folder="/home/jj/Music/DOWNLOADS"

query="Post"

list=()

while read filename; do
    if [[ "${filename#*$query}" != "$filename" ]]; then
        list+=("$filename")
    fi
done <<< $(find $folder -name "*.flac")

print  ${list[@]}

https://www.gnu.org/software/bash/manual/bashref.html#Here-Strings