我想将所有文件名保存在一个文件夹中,对其进行过滤,然后将它们全部放入一个数组中。
#!/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字符。
答案 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