我很好奇以下为什么:
array1=(file1 file2 file3)
array2=()
for i in ${array1[@]}
do
find . -name $i -type f -print0 2>/dev/null | \
while read -d '' -r file
do
array2+=( $file )
done
done
无法填充array2,假设文件名file1,file2和file3存在于启动搜索的父目录的子目录中的文件系统中。如果有人能指出我在这里错误的地方,我将不胜感激。
答案 0 :(得分:3)
试试这个:
array1=(file1 file2 file3)
array2=()
for i in "${array1[@]}"
do
while read -d '' -r file
do
array2+=( "$file" )
done < <(find . -name "$i" -type f -print0)
done
由于您使用了管道,因此在子shell结束时会创建子shell并且您的array2值会丢失。
答案 1 :(得分:1)
如果您使用bash
4,则可以避免使用find
:
shopt -s globstar
array1=(file1 file2 file3)
array2=()
for i in "${array1[@]}"
do
for f in **/"$i"; do
[[ -f "$f" ]] && array2+=( "$f" )
done
done